11

我需要设置引荐来源网址,在抓取网站之前,该网站使用基于引荐来源网址的身份验证,因此如果引荐来源网址无效,我将无法登录。

有人可以告诉如何在 Scrapy 中执行此操作吗?

4

4 回答 4

15

如果您想更改蜘蛛请求中的引用者,可以DEFAULT_REQUEST_HEADERSsettings.py文件中进行更改:

DEFAULT_REQUEST_HEADERS = {
    'Referer': 'http://www.google.com' 
}
于 2013-02-14T13:41:59.070 回答
13

您应该完全按照@warwaruk 的指示进行操作,以下是我对爬行蜘蛛的详细说明:

from scrapy.spiders import CrawlSpider
from scrapy import Request

class MySpider(CrawlSpider):
  name = "myspider"
  allowed_domains = ["example.com"]
  start_urls = [
      'http://example.com/foo'
      'http://example.com/bar'
      'http://example.com/baz'
      ]
  rules = [(...)]

  def start_requests(self):
    requests = []
    for item in self.start_urls:
      requests.append(Request(url=item, headers={'Referer':'http://www.example.com/'}))
    return requests    

  def parse_me(self, response):
    (...)

这应该在您的终端中生成以下日志:

(...)
[myspider] DEBUG: Crawled (200) <GET http://example.com/foo> (referer: http://www.example.com/)
(...)
[myspider] DEBUG: Crawled (200) <GET http://example.com/bar> (referer: http://www.example.com/)
(...)
[myspider] DEBUG: Crawled (200) <GET http://example.com/baz> (referer: http://www.example.com/)
(...)

将与 BaseSpider 相同。最后 start_requests 方法是 BaseSpider 方法,CrawlSpider 继承自该方法。

文档解释了除了 headers 之外要在 Request 中设置的更多选项,例如:cookies、回调函数、请求的优先级等。

于 2014-02-15T13:23:43.913 回答
5

只需在请求标头中设置Referer url

class scrapy.http.Request(url[, method='GET', body, headers, ...

headers (dict) – the headers of this request. The dict values can be strings (for single valued headers) or lists (for multi-valued headers).

例子:

return Request(url=your_url, headers={'Referer':'http://your_referer_url'})

于 2013-11-29T08:24:40.967 回答
3

覆盖BaseSpider.start_requests并在那里创建您的自定义请求,并将其传递给您的referer标头。

于 2012-10-28T15:40:13.377 回答