在网站的Google缓存上使用Scrapy

NFB*_*NFB 5 python scrapy

在"避免被禁止"标题下,Scrapy文档建议:

如果可能,请使用Google缓存来抓取网页,而不是直接点击网站

它是指http://www.googleguide.com/cached_pa​​ges.html,最近一次更新于2011年.

我试图这样做来刮一个网站,需要我无法绕过的验证码.但是,Google会创建同样的问题.

我使用这个中间件让蜘蛛留在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
Run Code Online (Sandbox Code Playgroud)

在蜘蛛本身,我使用以下设置礼貌地抓取:

custom_settings = {
    'AUTOTHROTTLE_ENABLE' :True,
    'CONCURRENT_REQUESTS' : 2, # or 1
    'DOWNLOAD_DELAY' : 8 # increased this to as much as 10
}
Run Code Online (Sandbox Code Playgroud)

我也尝试在原始网站和网站的Google缓存版本上使用Selenium.这有时会成功抓取几分钟并返回数据,但最终会登录https://support.google.com/websearch/answer/86640,其中指出Google会从您的计算机网络中检测到"异常流量",并且需要验证码继续进行.

看来Scrapy文档只是与Google的使用条款冲突,我是否正确?无论哪种方式,是否有推荐的方法来绕过验证码,或者尽管存在这种限制,仍然可以从网站的Google缓存中完成抓取?

更新,7-9-18:

当这个蜘蛛在一周或更长时间内运行几次时,它最终会产生完整或更全面的结果,显然是因为最初被抓取的URL在每次爬行时都会发生变化,并且在验证码开始之前就会成功.如果有人知道与文档一致的解决方案或者具体的解决方法.

jok*_*r91 2

我不太熟悉 Scrapy,但看来该网站必须阻止缓存视图。您是否尝试过使用https://www.seoweather.com/google-cache-search/检查缓存

如果您要使用代理,最好是反向连接代理,因为您在抓取 Google 时需要很多东西,因此您可以绕过 Google 的阻止。

另一种选择可能是尝试抓取页面的https://archive.org/web/版本?实际上,他们甚至有一个 API,您可以使用https://archive.org/help/wayback_api.php