2016-07-04 180 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已完全关闭,就好像标题未设置一样。

这里是HotSpider:

# -*- 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' 

如果我更改代码覆盖make_requests_from_url设置页眉,一切运行良好。

# -*- 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' 

这个问题将在Scrapy 1.2根据prioritize default headers over user agent middlewares #2091

回答

2

我看到的User-Agent头确实没有设置正确使用默认的标题中间件时,这种特殊的网站拒绝没有一些预期的连接解决用户代理标题。

设置用户代理为你推荐爬行方法是使用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" 

使用默认的头时,可能会在Scrapy一些bug,或者也许这是预料之中的某个文件没有设置用户代理。您需要对此进行更多的研究,如果确实存在bug值得在Scrapy github回购中发布bug报告。

+0

感谢您的回答!您建议设置用户代理的方式运行良好。 在文档中,我找到[User-Agen](http://doc.scrapy.org/en/latest/topics/settings.html#user-agent)和[DefaultHeadersMiddleware](http:// doc.scrapy。 org/en/latest/topics/downloader-middleware.html#scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware)。根据文档,我认为这是一个错误。 –