人生苦短 我用python
开始愉快的享(代)受(码)时间:
urllib 请求:
1) :<get 请求>
- Urllib是python内置的HTTP请求库
- response 响应可调用 read() 、readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数
和 msg 、 version 、 status 、reason 、debuglevel 、 closed 等属性
from urllib import request
# import urllib.request 或者这样写
url = 'http://www.baidu.com'
response = request.urlopen(url)
#print(response.read()) # 返回二进制形式的响应内容
print(type(response.read().decode('utf-8'))) # 读取网页内容 将二进制内容按照utf-8格式解码 生成字符串格式
2): <post请求>
传参: data 参数是可选的,如果要添加 data ,它要是字节流编码格式的内容,即 bytes 类型,通过 bytes() 函数可以进行转化,另外如果你传递了这个 data 参数,它的请求方式就不再是 GET 方式请求,而是 POST
# coding=utf-8
import urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding=
'utf8')
response = urllib.request.urlopen('http://httpbin.org/post', dat
a=data)
print(response.read())
# urllib.parse.urlencode() 方法来将参数字典转化为字符串
3):设置添加请求headers <Request>
from urllib import request,parse
url = "http://httpbin.org/post"
headers = {
#伪装一个火狐浏览器
"User-Agent":'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
"host":'httpbin.org'
}
dict = {
"name":"Germey"
}
data = bytes(parse.urlencode(dict),encoding="utf8")
req=request.Request(url=url,data=data,headers=headers,method="POST") # 利用更强大的 Request 类来构建一个请求
response = request.urlopen(req)
print(response.read().decode("utf-8"))
# 也可以通过更加灵活的方式添加headers 如:
# req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
# req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')
requests请求:
requests 是一个python的第三方网络请求库 安装方式: < pip install requests>
- 1):<get请求>
<基本get>
import requests
url = 'https://www.baidu.com/'
response = requests.get(url)
<带参数的get>
import requests
url = 'http://httpbin.org/get'
data = {
'name':'zhangsan',
'age':'25'
}
response = requests.get(url,params=data)
print(response.url) # 请求地址
print(response.text) # 字符串数据
print(response.content) # 二进制数据
print(s.headers) # 响应头
print(response.request.headers) # 请求头
- 2): <post请求>
通过post把数据提交到url地址,等同于一字典的形式提交form表单里面的数据
import requests
url = 'http://httpbin.org/post'
data = {
'name':'jack',
'age':'23'
}
response = requests.post(url,data=data)
print(response.text)
很多时候你想要发送的数据并非编码为表单形式的。如果你传递一个 string 而不是一个dict ,那么数据会被直接发布出去。
url = '[https://api.github.com/some/endpoint](https://api.github.com/some/endpoint)'
data_dict= {'some': 'data'}
r = requests.post(url,data=json.dumps(data_dict))
或者
r = requests.post(url, json=data_dict)
- 3): <json数据>
requests中 <response.json()> 方法等同于 <json.loads(response.text)>方法
import requests
import json
response = requests.get("http://httpbin.org/get")
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json())
- 高级操作
session,自动保存cookies,可以设置请求参数,下次请求自动带上请求参数
import requests
headers = {
'name': 'zhangsan',
'age': '18'
}
# response = requests.get('http://httpbin.org/cookies/set/sessioncookie/123456789', headers=headers)
s = requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
response = s.get('http://httpbin.org/cookies', headers=headers)
print(response.text) # 响应内容
print(s.headers) # 响应头
print(response.request.headers) # 请求头
打印结果:
# {"cookies":{"sessioncookie":"123456789"}}
# {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
# {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'name': 'zhangsan', 'age': '18', 'Cookie': 'sessioncookie=123456789'}