②使用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信息,作到对本身的完美假装。