【发布时间】:2012-10-15 17:04:23
【问题描述】:
我需要设置referer url,在抓取站点之前,该站点使用基于refering url的身份验证,因此如果referer无效,则不允许我登录。
有人可以告诉如何在 Scrapy 中执行此操作吗?
【问题讨论】:
我需要设置referer url,在抓取站点之前,该站点使用基于refering url的身份验证,因此如果referer无效,则不允许我登录。
有人可以告诉如何在 Scrapy 中执行此操作吗?
【问题讨论】:
如果您想更改蜘蛛请求中的引用者,可以在 settings.py 文件中更改 DEFAULT_REQUEST_HEADERS:
DEFAULT_REQUEST_HEADERS = {
'Referer': 'http://www.google.com'
}
【讨论】:
你应该完全按照@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继承自该方法。
Documentation 解释了 Request 中除了 headers 之外的更多选项,例如:cookies、回调函数、请求的优先级等。
【讨论】:
只需在请求标头中设置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'})
【讨论】:
覆盖 BaseSpider.start_requests 并在那里创建您的自定义 Request 并将您的 referer 标头传递给它。
【讨论】: