requests模块 反爬虫
您好,接下来我将为您带来几种常见的python requests模块,在模拟请求时做的破解反爬虫逻辑和代码实现。
1.UserAgent
很多网站都会进行headers头部里的UserAgent验证,但是很多小伙伴不知道是,python为我们提供了一个便捷的UserAgen 第三方模块,它会为我们的请求自动配置UserAgent,接下来请看代码。
from fake_useragent import UserAgent
ua = UserAgent()
headers = {
#ua.random 表示的时 随机生成一个User-Agent,这样的话我们就能有很多个 User-Agent 来使用,
#就不用再担心 被封ip了。
"User-Agent": ua.random,
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Language" : "zh-CN,zh;q=0.9",
"Accept-Encoding" : "gzip, deflate, br",
"DNT" : "1",
"Connection" : "cloes"
}
2.IP代理池
IP代理池也是一个很不错的破解反爬虫的技术,ip代理池很多时候都是用买来的高隐匿ip,我为大家带来的是 自己平时维护的可用性较高的ip,来实现的ip代理池。
"""
因为,我的ip数据是存在mysql中的,我每次都会在取出来之前,
去访问一次百度的网站,以此来换取code状态是否是大于200 小于300,
来判断自己的免费ip是否被封了。
真正的核心代码是 proxies={"HTTP": proxy_url},它就实现了 更换访问
ip
"""
#判断爬取的IP是否能用
def Ip_judge(proxy_type,ip,port):
http_url = "http://www.baidu.com"
proxy_url = "{0}://{1}:{2}".format(proxy_type,ip, port)
try:
response = requests.get(http_url, proxies={"HTTP": proxy_url})
code = response.status_code
if code >= 200 and code < 300:
print("该%s可以使用"%(ip),code)
# UpdModifys(ip)
return True
else:
UpdModifys(ip)
print("%s不能使用"%(ip),code)
return False
except Exception as e:
print("访问%s出错...")
return False
- 下载限速
下载限速也是很常见的不被封的ip的办法,但是很多小伙伴在代码实现的时候都会忽略它,但是我还是希望小伙伴们 能够重视它!!。
#python的requests模块进行下载带宽限制,进行现在速度限制,避免拉爆服务器。
#开启requests的stream=True就可以进行渐进式下载,然后再适当的sleep一下。
#就可以减少下载带宽,限制下载速度了。
requests.get(http_url,stream=True)
- 验证码破解
验证码的话,我提议直接对接大码平台就行了。不要想着自己写代码实现,因为这个实现起来成本很高的。具体代码实现的话 各位小伙伴只能自行百度大码平台了,它们都有demo的。