Requests 库
下面开始的就是 requests 库的高级操作了。
https://2.python-requests.org//zh_CN/latest/user/advanced.html#advanced
会话对象
如果你用 .post() 登录了一个页面,然后再用 .get() 去爬取只有登录才显示的信息,你能不能查得到呢?答案是否。
这个场景,专业一点来说,是不同会话的问题。原因是这是两个会话对象,他们之间的 cookies 信息是不共享的,所以后者不能爬取想要的信息。
要想解决这个问题,办法还是挺简单的。那就是使用 .session() 。
上面通过测试网址,先设置了名称就做 sessioncookie 而内容是 123456789 的cookies,然后再发起一次请求,得到之前设置的 cookies 。所以,这就说明了应用 session 可以解决上述问题。
PS:图片下面的橙色的内容是 print 语句输出的内容。
准备的请求
当你从 API 或者会话调用中收到一个 Response 对象时,request 属性其实是使用了 PreparedRequest。有时在发送请求之前,你需要对 body 或者 header (或者别的什么东西)做一些额外处理,下面演示了一个简单的做法:
from requests import Request, Session
s = Session()
req = Request('GET', url,
data=data
headers=headers
)
prepped = s.prepare_request(req)
# do something with prepped.body
# do something with prepped.headers
resp = s.send(prepped,
stream=stream,
verify=verify,
proxies=proxies,
cert=cert,
timeout=timeout
)
print(resp.status_code)
由于你没有对 Request 对象做什么特殊事情,你立即准备和修改了 PreparedRequest 对象,然后把它和别的参数一起发送到 requests.* 或者 Session.*。