サイトをスクレイピングする前にリファラー URL を設定する必要があります。サイトは参照 URL ベースの認証を使用するため、リファラーが有効でない場合はログインできません。
誰かがScrapyでこれを行う方法を教えてもらえますか?
サイトをスクレイピングする前にリファラー URL を設定する必要があります。サイトは参照 URL ベースの認証を使用するため、リファラーが有効でない場合はログインできません。
誰かがScrapyでこれを行う方法を教えてもらえますか?
スパイダーのリクエストでリファラーを変更したい場合DEFAULT_REQUEST_HEADERS
は、settings.pyファイルで変更できます。
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 メソッドは CrawlSpider が継承する BaseSpider メソッドです。
ドキュメントでは、Cookie、コールバック関数、リクエストの優先度など、ヘッダーとは別に Request に設定するオプションについて説明しています。
リクエストヘッダーに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
カスタムリクエストをオーバーライドして作成します。referer