经常写爬虫的同学一定知道CloudFlare的5秒护盾。当您在没有正常浏览器的情况下访问该网站时,会返回以下文本:Checkingyourbrowserbeforeaccessingxxx.这个过程是自动的。您的浏览器将很快重定向到您请求的内容。请允许最多5秒……即使您完全获取标头并使用代理IP,它仍然会被发现。让我们看一个例子。MountainViewWhismanstudentssenthomeafterchildrentestpositiveforCOVID-19[1]本文,使用普通浏览器访问,效果如下图:直接查看原网页源代码,可以看到新闻标题和正文在源码中,说明新闻的标题和正文是后台渲染的,不是异步加载的。如下图所示:现在,我们使用带有完整请求头的requests来访问这个网站。效果如下图所示:网站识别出爬虫行为,成功拦截爬虫请求。很多同学此时都束手无策。因为这是爬虫的第一个请求,所以被拦截了,所以网站不是检测到的IP或者访问频率,所以即使使用代理IP也无济于事。而现在即使能找到完整的请求头,那有没有办法绕过这个检测呢?其实绕过这个5秒护盾很简单。你只需要使用一个名为cloudscraper的第三方库。我们可以使用pip安装:python3-mpipinstallcloudscraper安装完成后只需要3行代码就可以绕过CloudFlare的5秒屏蔽:importcloudscraperscraper=cloudscraper.create_scraper()resp=scraper.get('targetwebsite').text我们以上面的网站为例:学生在儿童测试后被送回家covid-19').textselector=fromstring(resp)title=selector.xpath('//h1/text()')[0]print(title)运行效果如下图:护盾破成功。CloudScraper[2]强大到可以突破CloudFlare免费版所有版本的五秒护盾。并且其接口与请求一致。如何用requests写代码,现在只需要将requests.xxx改成scraper.xxx即可。参考资料[1]MountainViewWhisman学生在儿童COVID-19检测呈阳性后被送回家:https://mv-voice.com/news/2021/05/04/mountain-view-whisman-students-sent-home-after-children-test-positive-for-covid-19[2]CloudScraper:https://github.com/venomous/cloudscraper转载本文请联系Code公众号。
