利用pip
进行安装:pip install requests
中文文档:Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档
GET
请求:1.最简单的发送get
请求就是通过requests.get
来调用:
response = requests.get('http://www.baidu.com')
2.添加headers
和查询参数:
如果想添加headers
,可以传入headers
参数来增加请求头中的headers
信息。如果要将参数放入url
中传递,可以利用params
参数。示例代码如下:
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
data = {'wd':'中国'}
url = 'https://www.baidu.com/s'
response = requests.get(url,params=data,headers=headers)
# 查看响应内容,Unicode格式
print(response.text)
# 查看响应内容,字节流格式,可以使用decode进行编码
print(response.content)
# 查看完整的url地址
print(response.url)
# 查看响应头部字符编码
print(response.encoding)
# 查看响应的状态码
print(response.status_code)
POST
请求:1.最基本的POST
请求可以使用post
方法:
response = requests.get('https://www.baidu.com/s',data=data)
2.传入data
数据:
这时候就不要在使用urlencode
进行编码了,直接传入一个字典进去就可以了。如果返回的数据是json
类型的,可以按照字典的操作来进行提取数据。示例代码如下:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Referer': 'https://www.lagou.com/jobs/list_python%E7%88%AC%E8%99%AB?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
}
data = {'first': 'true', 'pn': '1', 'kd': 'python爬虫'}
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
response = requests.post(url, data=data, headers=headers)
json_str = response.json()
result = json_str['content']['positionResult']['result']
for i in result:
# 输出公司名
print(i['companyShortName'])
# 输出城市名
print(i['city'])
print('*' * 20)
使用requests
添加代理非常简单,只要在请求的方法中(比如get
或post
)传递proxies
参数就可以了。示例代码如下:
import requests
url = 'http://httpbin.org/ip'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
proxy = {
'http': '118.190.95.35:9001'
}
resp = requests.get(url,headers=headers,proxies=proxy)
print(resp.text)
cookie
:如果在一个响应的包含了cookie
,那么可以利用cookie
属性拿到这个返回的cookie
值:
import requests
resp = requests.get('http://www.baidu.com')
print(resp.cookies)
# 获取cookie的详细信息
print(resp.cookies.get_dict())
session
:之前使用urllib库,是可以使用opener发送多个请求,多个请求之间是可以共享cookie的。那么如果要使用requests也要达到共享的cookie的目的,那么可以使用requests库提供的session对象。注意,这个session不是web开发中的session,这里只是一个会话对象而已。还是以登录人人网为例。示例代码如下:
import requests
url = 'http://renren.com/PLogin.do'
data = {'email':'人人邮箱账号','password':'密码'}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 登录
session = requests.Session()
session.post(url,headers=headers,data=data)
# 访问大鹏个人中心
resp = session.get('http://www.renren.com/880151247/profile')
print(resp.text)
SSL
证书:对于那些已经被信任的SSL
证书的网站,比如http://www.baidu.com/
,那么使用requests
直接就可以正常的返回响应。如果SSL
证书不被信任,那么在请求网站的时候需要添加一个参数verify=False
。示例代码如下:
resp = requests.get('http://www.12306.cn/mormhweb/',verify=False)
print(resp.content.decode('utf-8'))