准备工作:
安装requests库
pip install requests
初步使用:
获取网页信息直接采用 get() 方法
import requests
#get方法发送网址)
res=requests.get('https://www.csdn.net')
#查看它的类
print(type(r))
#查看状态码
print(r.status_code)
#从HTTP header中猜测的响应内容编码方式
print(r.encoding)
#打印响应内容类型
print(type(r.text))
#HTTP响应内容的字符串形式
print(r.text)
#打印cookie
print(r.cookies)
HTTP请求
GET请求
使用 get() 方法主要用来获取网页信息,就像我们在浏览器里面输入内容然后获得信息。
基本上没有什么限制,像一些需要登陆后保持Cookies的情况先不说,但是也要满足网站的要求,比如很多网站都需要加上headers信息才能访问,这样能伪装成浏览器
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36'
}
r = requests.get('https://www.zhihu.com', headers=headers)
print(r.status_code)
print(r.text)
可以直接获取到主页信息,User-Agent字段信息,也就是浏览器标识信息。如果不加这个,知乎会禁止抓取。一般情况下,使用 get() 方法时只要注意好headers信息就好了,针对网站所需要的信息适当选取内容。
对于params参数,就是请求时附加的额外信息。
比如,假设要添加两个参数username为name、password为pwd,可以把链接进行更改:http://httpbin.org/get?username=name&password=pwd,与 post() 的data参数是类似的
POST请求
使用 post() 方法主要是附加数据再提交,比如表单信息或JSON数据,把信息放在data参数里面。
可以请求http://httpbin.org/post来看一下情况,该网站会判断如果客户端发起的是POST请求的话,它返回相应的请求信息
import requests
data = {'page': 1, 'pwd': s}
r = requests.post("http://httpbin.org/post", data=data)
发送JSON数据:
import json
import requests
payload = {'page': 1, 'pwd': 's'}
r = requests.post("http://httpbin.org/post", data=json.dumps(payload))
print(r.text)
Cookies
如果某个响应包含一些 cookie,可以直接访问它们,比如:
如果在一个响应中包含了cookie
,那么可以利用cookies
属性拿到这个返回的cookie
值:
-
import requests
-
url = "http://www.renren.com/PLogin.do"data = {"email":"970138074@qq.com",'password':"pythonspider"}
-
resp = requests.get('http://www.baidu.com/')
-
print(resp.cookies)
-
print(resp.cookies.get_dict())
要想发送 cookies 到服务器,可以使用 cookies 参数:
import requests
url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
超时
可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,程序可能会永远失去响应:
requests.get('http://github.com', timeout=0.001)
session:
之前使用urllib
库,是可以使用opener
发送多个请求,多个请求之间是可以共享cookie
的。那么如果使用requests
,也要达到共享cookie
的目的,那么可以使用requests
库给我们提供的session
对象。注意,这里的session
不是web开发中的那个session,这个地方只是一个会话的对象而已。还是以登录人人网为例,使用requests
来实现。示例代码如下:
import requests
url = "http://www.renren.com/PLogin.do"
data = {"email":"970138074@qq.com",'password':"pythonspider"}
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}
# 登录
session = requests.session()
session.post(url,data=data,headers=headers)
# 访问大鹏个人中心
resp = session.get('http://www.renren.com/880151247/profile')
print(resp.text)
使用代理:
使用requests
添加代理也非常简单,只要在请求的方法中(比如get
或者post
)传递proxies
参数就可以了。示例代码如下:
import requests
url = "http://httpbin.org/get"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',}
proxy = {'http': '171.14.209.180:27829'}
resp = requests.get(url,headers=headers,proxies=proxy)