2017-05-17 6 views
2

Google 이미지를 사용하여 역 이미지 검색 결과를 긁어 내려고 시도하고 있습니다.Scrapy/Splash로 Google 이미지 긁힘 - 리디렉션 받기

내 시작 URL은 브라우저에서 의도 한대로 작동하는 https://www.google.com/searchbyimage?image_url=DIRECT_IMAGE_URL입니다.

그러나 Scrapy를 통해 스크래핑하려고하면 요청이 그림과 같이 세 번 리디렉션됩니다. 그 결과 웹 페이지 대신 결과 페이지의

Google search result

처럼 찾고

Image reverse search redirects

. 내 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. 부족 - 그래서 나는 페이지를
  2. 쿠키를 렌더링하기 위해 플래쉬를 사용 - 그것을 일하고 생각?
  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 가지 리디렉션의 원인은 무엇입니까? 첫 번째 리디렉션은 결과에 필요하지만 두 번째 및 세 번째 리디렉션은 아니며 잘못된 페이지를 제공합니다.

답변

3

나는 그것을 알아 냈습니다! 내 오류는 User-Agent에서 발생했습니다. 나는 User-Agent를 설정하고 있다고 생각했지만 실제로는 요청에 대한 헤더를 설정했습니다. 스플래시으로 보내지는 요청은 실제로 긁어 버리려는 페이지로 전송되지 않았습니다.

이 작업을 얻기 위해, 나는

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'}) 

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 
      } 
     }) 

변경