Contents
  1. 1. header要设置好
  2. 2. 使用session
  3. 3. 记得更新cookie

最近因为需要再写一个爬取支付宝账单的爬虫,里面的cookie过期时间是会话结束,所以要维持会话。在网上看了很多资料后终于实现了。下面再结合我自己的经验,谈一谈其中的注意事项。

header要设置好

首先,先将最基本的header做好,可以通过浏览器的网络分析看到这些信息。

Chrome's network

1
2
3
4
5
header = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Host' : 'my.alipay.com',
'Connection' : 'keep-alive',
'Cookie' : 'foo=blabla; time=142555'}

像这样一个请求头,可以一定程度上伪装成浏览器。

使用session

requests 模块下的session类可以很方便的自动处理很多东西(cookie, session 啥的),而且在维持会话也是必不可少的。使用方法也很简单:

1
2
s = requests.session()
s.headers.update(header)

另外还可以设置session类的cookie,具体的可以看官方文档。

记得更新cookie

session有个奇怪的特性,它会优先使用用户设置的cookie覆盖来自响应的cookie,所以我们要手动更新下。

1
2
3
req = s.get('https://my.alipay.com/portal/i.htm')
if req.cookies.get_dict():
s.cookies.update(req.cookies)

所以总体的步骤就是:实例化一个session,设置header和cookie,再更新cookie。循环爬取时,注意不要再用一开始设置的cookie覆盖更新完的cookie了。

这样每隔一段时间get一下,就可以维持回话了。另外,具体定情况具体分析。每次做爬虫,我都会觉得很玄学,因为有太多细节需要注意。实在不行,就只能用selenium啥的抵挡一阵了。

Contents
  1. 1. header要设置好
  2. 2. 使用session
  3. 3. 记得更新cookie