学会使用ip池和cookie池假装

在进入正题以前,咱们先复习一个关于requests模块的相关知识点:html

requests中解决编码的三种方法:python

①response.content浏览器

类型:bytes服务器

解码类型:没有指定cookie

如何修改编码方式:response.content.decode()网络

②response.content.decode()session

类型:strpost

解码类型:解码成python文本的字符串类型网站

如何修改编码方式:respsonse.content.decode(encoding="utf-8")编码

③response.txt

类型:str

解码类型:根据HTTP头部对响应的编码做出有根据的推测,推测的文本编码。

如何修改编码方式:response.encoding="gbk"

 

因此,综上所述,最好的方式就是使用response.content.decode()来获取响应的html页面。

 

那么如今,回到正题:

咱们作爬虫的时候,必定要学会假装本身。

由于一旦有一天,你不采起措施,可是你需求的量多,频率也快,是很容易被识别为爬虫的,从而对你拦截处理。

思路很简单,就是我一我的模拟多我的,那么从人的属性分析:

浏览器名称,ip地址,cookie和session信息。

因此咱们写爬虫的时候,要准备一堆User-Agent,一堆ip地址和一堆cookie信息。

 

①使用代理ip
ip参数是proxies,依旧是字典的形式 {"http":"http://www.baidu.com"}
 
ip的选择
-准备一堆的ip地址,组成ip池,使用代理时随机选择一个ip使用。
-{"ip":"times":0}
-[{},{},{},{}],对这个ip地址的列表进行排序,按照使用次数进行那个排序。
-选择使用次数较少的10个ip,从中随机选择一个。

检查ip的可用性
-可使用requests添加超时参数,判断ip地址的质量
-在线代理ip质量检测的网站
 
import requests
proxies={"http":"http://132.232.52.79:80"}       #选择代理IP地址的时候,要选对跟本身网络符合的端口哦,不然就是407
headers={"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1"}
url="http://www.baidu.com"

response=requests.get(url,proxies=proxies,headers=headers)
print(response.status_code)
 
 
②使用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信息,作到对本身的完美假装。
相关文章
相关标签/搜索