一些反爬虫的常见措施以及应对方案

以下代码python语法为例子:

headers 请求头中检测

检测referer :用户上一次访问的网页,以判断访问流程是否符合正常人的访问逻辑

'referer':'https://dig.chouti.com/'

检测cookie(session) :cookie 中带有用户的个人信息认证,网页后端可以以此判定是否为人为爬取。有时这也会被当作反爬虫的一种措施,例如抽屉新热榜目前(19.05)是需要携带在未登录状态下刚刚访问网页时的cookie,而不是访问网页时的cookie,我猜测抽屉的后端可能是将用户的ip地址等其他信息作为用户登陆认证的依据上传,而不是通过登陆后的cookie。

'cookies':'gpsd=376d0cb254d4b112e60e184a2abd9d73; gpid=27f836cdd1884383b527b4392c8df6f6; _9755xjdesxxd_=32; YD0000098905869%3AWM_NI=WmgJgYCQVMJUeuGqQ8m5h3O%2B9YDGz9pFKmVJap0gUsr6oy2z%2F6yxNm6uopgrJXcNXILl2jBoKgKnUxNYN9stNt3Gu%2BI5xmwQx3DjNlm%2Bi%2BSx7xPGFnqFXcbexjl69oeVVQ%3D; YD00000980905869%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eea8b64881bd8e97d664a3ac8eb6d55b939a9aaff339f38ae58ae27dadecb6adcb2af0fea7c3b92a95b3a9abe653818f9aaec95fa7ab8992d434afeba8d4ce21fb878ca8f933b49a858ed542a3b00088d8792eaa19ab172edeab7bafb46afeabb90f36db2969884cd548b94a4d3e94aad95a9aced5fbc9297afbc79b892bcd4c67fe997fb99f07d93a8fda5e946b0b3e5aaa59bce9b8b1c64eaeaf8ab9e26aa7a8a68db533adbb9ab7d437e2a3; YD00000980905869%3AWM_TID=4u9E1XY7S%2BdEVRQBQBMszhU%2BmMx88zaX; JSESSIONID=aaaF9omlhW6DPhdsO4hSw; puid=e552ae20bd30d6f927b70eb158a4924c; gdxidpyhxdE=afjEtD%2B8Ijmn4XbIDopMv2sVVE%2Bgi5BuMubpsBBOHkUcSEdnMzsqgIzujLEZlto5gPGT4OHAyVzMbx8rEeqSoiCzNcG%5C06ASgKuo6x8rM%2FsgRxcgu5YwNrGuO5LVaLKMn6eIRAi%5CGeAt3ou1Ci1WRPm%2B2gy3AfhPWp%2BsfwhWPrkvEtt%3A1559210268065'

检测user-agent:最常用的判断是否为爬虫或浏览器访问的依据,一般有点反爬措施的网站都会加上去。

headers = {
'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Mobile Safari/537.36'
}

GET方式提交请求

 response = requests.get(url,headers=headers,cookies=cookies)

POST方式提交请求

response = requests.post(url,data=data,headers=headers,cookies=cookies)

基于行为检测

行为检测是非常常见的一种脚本检测,网站后台和游戏运行商都会基于用户行为进行一定的检测,一些反人类操作都会触发反爬虫措施。
以下是有可能检测的内容:

IP地址限制

请求频率限制

Referer之前访问的网页地址。

对应解决方案:

代理池

多账号轮流爬取

带上之前访问的referer地址,如果采用selenium的话先访问一下baidu之类的搜索引擎的再进入需要爬取的网页。

基于AJAX或JS代码

网页前端通过AJAX和JS的多层封装,用算法对返回的数据进行加密,导致爬取难度加大,这个挺吃水平的,很多时候我也只能用selenium+js 模拟浏览器操作来对数据进行抓取。

示例

browser = webdriver.Chrome()

js = """   document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display="none";   """

browser.execute_script(js)

如果遇到检测selenium的话,把chrome_option加上去

from selenium.webdriver import  ChromeOptions
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值