在网站的Google缓存中使用Scrapy

时间:2018-05-27 19:02:22

标签: python scrapy

在标题"避免被禁止",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会在每次抓取时发生变化并在验证码开始之前成功。如果有人知道解决方案与文档或具体的解决方法。

1 个答案:

答案 0 :(得分:1)

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

检查缓存

如果你使用代理服务器,你可以解决谷歌阻止问题,最好是回复连接代理服务器,因为你在抓取谷歌时需要很多。

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