11

サイトをスクレイピングする前にリファラー URL を設定する必要があります。サイトは参照 URL ベースの認証を使用するため、リファラーが有効でない場合はログインできません。

誰かがScrapyでこれを行う方法を教えてもらえますか?

4

4 に答える 4

15

スパイダーのリクエストでリファラーを変更したい場合DEFAULT_REQUEST_HEADERSは、settings.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 メソッドは CrawlSpider が継承する BaseSpider メソッドです。

ドキュメントでは、Cookie、コールバック関数、リクエストの優先度など、ヘッダーとは別に Request に設定するオプションについて説明しています。

于 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 に答える