②使用cookie和session
cookie存放在客户的浏览器上,session数据放在服务器上。
一组cookie和session的信息对应于一个用户的信息。
使用过快过多会被识别会爬虫。
但是要获取登陆之后的页面,必须发送带有cookies的请求。
携带cookie请求
跟ip池一样的是,这次需要携带一堆cookie进行请求,把cookie组成cookie池。
使用requests提供的session类来请求登陆之后的网站的思路
实例化sessin,
先使用session发送post请求,登录到正确的网站,把cookie保存在session中,
再使用session请求get登陆之后才能访问的网站,session能够自动地携带登录成功时保存在其中的cookie,进行请求。
import requests
session=requests.session()
url="http://www.renren.com/SysHome.do"
data={"email":"177********","password":"***123456789"}
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6814.400 QQBrowser/10.3.3005.400"}
#使用session发送post请求,cookie保存在其中
session.post(url,data=data,headers=headers)
#使用session进行登陆之后才能访问的地址
response=session.get("http://www.renren.com/969398979/profile",headers=headers)
#保存页面
with open("renrenwang.html","w",encoding="utf-8") as f:
f.write(response.content.decode())
cookie和session的使用思路,我再复述一遍:
首先实例化一个session,然后准备好post请求的表单内容,里面包含账号密码等登陆信息。
然后用session发送post请求,登陆上网站,这个时候已经完成cookie和session的自动保存。
于是就再用session直接发送get请求,登陆上一个需要登陆账号密码的网页,这个时候,依旧能访问成功。
值得一提的是,这个过程可以简化,当遇到一下三种情况的时候:
1.cookie过期时间很长的网站
2.在cookie过期之前能够拿到所有的数据,比较麻烦
3.配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面
我们可以直接加入cookie信息,直接登陆上去。方法是和headrs字典一样的,创造一个cookie字典放进去,然后get请求里面放一个cookies参数。
具体过程我就不放代码了,结合headers类似的方法应该都懂。
总结一下今后的爬虫之路,就是准备一堆浏览器名称,一堆IP地址和一堆cookie信息,做到对自己的完美伪装。