2016-07-04 4 views
2

내가 아래 settings.py의 기본 요청 헤더를 변경 작동하지 :scrapy의 DEFAULT_REQUEST_HEADERS는

DEFAULT_REQUEST_HEADERS = { 
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36', 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
    'Accept-Encoding': 'gzip, deflate, sdch', 
    'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4', 
} 

그러나, 내 HotSpider에서 작업을 나던. scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware이 활성화되어 있지만 헤더가 설정되지 않은 것처럼 Connection이 정상적으로 닫혔습니다. 나는 make_requests_from_url 헤더를 설정 오버라이드 (override)하는 코드를 변경하는 경우

# -*- coding: utf-8 -*- 
    import scrapy 

    class HotSpider(scrapy.Spider): 
     name = "hot" 
     allowed_domains = ["qiushibaike.com"] 
     start_urls = (
      'http://www.qiushibaike.com/hot', 
     ) 

     def parse(self, response): 
      print '\n', response.status, '\n' 

는, 모든 것이 잘 작동 : 여기

는 HotSpider입니다.

# -*- coding: utf-8 -*- 
    import scrapy 


    class HotSpider(scrapy.Spider): 
     name = "hot" 
     allowed_domains = ["qiushibaike.com"] 
     start_urls = (
      'http://www.qiushibaike.com/hot', 
     ) 
     headers = { 
      'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36', 
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
      'Accept-Encoding': 'gzip, deflate, sdch', 
      'Accept-Language': 'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4', 
     } 

     def make_requests_from_url(self, url): 
      return scrapy.http.Request(url, headers=self.headers) 


     def parse(self, response): 
      print '\n', response.status, '\n' 

이 문제는 사용자 에이전트 헤더는 참으로 기본 헤더 미들웨어를 사용하는 경우 제대로 설정되어 있지 않고이 특정 사이트가 일부 예상하지 않고 연결을 거부 참조 prioritize default headers over user agent middlewares #2091

답변

2

에 따라 Scrapy 1.2에 정착 될 것이다 사용자 에이전트 헤더.

예 : 크롤러에 대한 사용자 에이전트를 설정하는

권장되는 방법은 키 설정 USER_AGENT을 사용하는 것입니다

# settings.py 
USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36" 

기본 헤더를 사용할 때 user-agent를 설정하지 않으면 Scrapy의 버그 일 수 있으며 어딘가에 문서화되어있을 수도 있습니다. 이것에 대해 더 많은 연구를해야합니다. 실제로 버그 일 경우 Scrapy github repo에 버그 리포트를 게시 할 가치가 있습니다.

+0

답변 해 주셔서 감사합니다. 사용자 에이전트를 설정하는 방법이 잘 작동합니다. 문서에서 [User-Agen] (http://doc.scrapy.org/en/latest/topics/settings.html#user-agent) 및 [DefaultHeadersMiddleware] (http : //doc.scrapy. org/ko/latest/topics/downloader-middleware.html # scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware). 문서에 따르면, 나는 이것이 버그라고 생각합니다. –

관련 문제