在标题"避免被禁止",Scrapy documentation advises:
如果可能,请使用Google缓存来抓取网页,而不是直接点击网站
它指的是http://www.googleguide.com/cached_pages.html,最近一次更新于2011年。
我试图这样做来刮一个需要验证码的网站我无法绕过。但是,谷歌会产生同样的问题。
我使用此中间件让蜘蛛留在Google缓存版本的链接上:
class GoogleCacheMiddleware(object):
def process_request(self, request, spider):
if spider.use_google_cache == True and 'googleusercontent' not in request.url:
new_url = 'https://webcache.googleusercontent.com/search?q=cache:' + request.url
request = request.replace(url=new_url)
return request
在蜘蛛本身中,我使用以下设置礼貌地抓取:
custom_settings = {
'AUTOTHROTTLE_ENABLE' :True,
'CONCURRENT_REQUESTS' : 2, # or 1
'DOWNLOAD_DELAY' : 8 # increased this to as much as 10
}
我还尝试在原始网站和网站的Google缓存版本上使用Selenium。这有时会成功抓取几分钟并返回数据,但最终会落在https://support.google.com/websearch/answer/86640,这表明Google会检测到"异常流量"从您的计算机网络,并需要验证码继续。
Scrapy文档似乎与Google的使用条款相冲突,我是否正确?无论哪种方式,是否有推荐的方法来绕过验证码,或者尽管存在这种限制,还是从网站的Google缓存中完成抓取?
更新,7-9-18:
当这个蜘蛛在一周或更长时间内运行几次时,它最终会产生完整或更全面的结果,显然是因为最初被抓取的URL会在每次抓取时发生变化并在验证码开始之前成功。如果有人知道解决方案与文档或具体的解决方法。
答案 0 :(得分:1)
我不熟悉Scrapy,但似乎网站必须阻止缓存视图。您是否尝试使用https://www.seoweather.com/google-cache-search/
检查缓存如果你使用代理服务器,你可以解决谷歌阻止问题,最好是回复连接代理服务器,因为你在抓取谷歌时需要很多。
另一种选择可能是试图抓取页面的https://archive.org/web/版本?实际上,他们甚至有一个API,您可以使用https://archive.org/help/wayback_api.php