关于pyspider绕过CloudFlare验证的问题
问题在最后。
爬一个网站,遇到下图的cloudflare5秒验证
搜索了一下发现pyspider的github的issues里面已经有人指出了可以使用Anorov/cloudflare-scrape
来绕过并且还提交了pull requests:
https://github.com/binux/pyspider/pull/635
但是binux指出可以直接参考https://github.com/Anorov/cloudflare-scrape#integration来使用,而不用增加一种新的fetch type。
我简单测试了一下,发现Anorov/cloudflare-scrape无法绕过我需要爬取的网站获取到内容,但是找到了看起来差不多但略有增强的一个包可以绕过:
https://github.com/VeNoMouS/cloudscraper
主要是通过使用该包的get_tokens
方法获取cookies和user_agent传给pyspider来绕过,代码如下:
from pyspider.libs.base_handler import *
import cloudscraper
def getheader(url):
cookie_value, user_agent = cloudscraper.get_tokens(url, browser={'browser': 'chrome', 'mobile': False})
return cookie_value, user_agent
class Handler(BaseHandler):
cookie_value, user_agent = getheader('https://somesite.com/')
crawl_config = {
'headers': {
'User-Agent': user_agent
},
'cookies': cookie_value
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('https://somesite.com/', callback=self.index_page)
@config(age=1 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('article').items():
url = each('a').attr.href
self.crawl(url, callback=self.book_page, save={'url1': url})
# 下一页
self.crawl(response.doc('li.next-page > a').attr.href, callback=self.index_page)
……后面省略
经过测试,该代码能够顺利绕过cloudflare并获取到result。
但是问题来了:在web测试里面基本没有问题,只有极其小的概率会出现验证问题(提示出现了recaptcha验证)。
但是让代码running起来之后,一开始能抓取一些页面,一旦中途有问题出现或者暂停了一段时间后面就是大面积错误,事实上代码此后就等同于失效了。
我想是不是获取的headers和cookies存储在scheduler
里面,出错或者暂停之后下次再运行的时候还是用之前获取的headers和cookies,结果就造成了无法通过验证。
或者也许是同一个ip访问太过频繁被封锁,但是出现错误之后我用web调试还是能够获取结果的。
不知道哪里不对,哪位热心的朋友能够给点建议吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论