【问题标题】:Scraping Google Images with Scrapy / Splash - Getting redirected使用 Scrapy / Splash 抓取 Google 图片 - 重定向
【发布时间】:2017-10-16 16:58:45
【问题描述】:

我正在尝试使用 Google 图片抓取反向图片搜索的结果。

我的起始 URL 是 https://www.google.com/searchbyimage?image_url=DIRECT_IMAGE_URL,它在浏览器中按预期工作。

但是,当我尝试通过 Scrapy 抓取它时,请求被重定向 3 次,如图所示;

生成的网页看起来像

而不是结果页面。这是我的 Scrapy settings.py

    SPLASH_URL = 'http://splash:8050'
    DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
     SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
      }
     DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
      HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
      REDIRECT_MAX_TIMES = 2
      HTTPCACHE_ENABLED = True 

我考虑过;

  1. 缺少 Javascript - 所以我使用 Splash 来呈现页面
  2. Cookie - 我认为它有效?
  3. 设置最大重定向 - 无效

这是我对 SplashRequest 的调用;

yield SplashRequest(url, self.parse, meta={
        'cookiejar': i,
        'wait': 0.5,
        'splash': {
          'args': {
              'html': 1,
              'png': 1,
          },
          'splash_headers': {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11'
          }       # optional; a dict with headers sent to Splash
      }

知道是什么导致了 3 次重定向吗?结果需要第一次重定向,但第 2 次和第 3 次则不需要,并且给了我错误的页面。

【问题讨论】:

    标签: python scrapy screen-scraping splash-screen


    【解决方案1】:

    我想通了!我的错误在用户代理中。我以为我是在设置 User-Agent,但实际上我是在设置发送到 Splash 的请求的标头,而不是实际发送到我要抓取的页面的请求。

    为了让它工作,我改变了

    yield SplashRequest(url, self.parse, meta={
                'cookiejar': i,
                'wait': 0.5,
                'splash': {
                  'args': {
                      'html': 1,
                      'png': 1,
                  },
                  'splash_headers': {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11'
                  }       # optional; a dict with headers sent to Splash
              }
            })
    

    yield SplashRequest(url, self.parse, meta={
                'cookiejar': i,
                'wait': 0.5,
                'splash': {
                  'args': {
                      'html': 1,
                      'png': 1,
                  }
              },
            }, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'})
    

    【讨论】:

    • 非常感谢,我有一个有点类似的项目,这对我很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多