Scrapy のparse()
関数でリクエスト URL を取得するにはどうすればよいですか? たくさんの URL がstart_urls
あり、そのうちのいくつかはスパイダーをホームページにリダイレクトするため、空のアイテムがあります。したがってitem['start_url'] = request.url
、これらの URL を保存するようなものが必要です。BaseSpider を使用しています。
52590 次
5 に答える
17
request オブジェクトは response オブジェクトからアクセスできるため、次のことができます。
def parse(self, response):
item['start_url'] = response.request.url
于 2015-12-29T03:57:56.733 に答える
7
BaseSpider のmake_requests_from_url(url)
関数をオーバーライドして start_url をアイテムに割り当て、Request.meta
特殊キーを使用してそのアイテムをparse
関数に渡す必要があります。
from scrapy.http import Request
# override method
def make_requests_from_url(self, url):
item = MyItem()
# assign url
item['start_url'] = url
request = Request(url, dont_filter=True)
# set the meta['item'] to use the item in the next call back
request.meta['item'] = item
return request
def parse(self, response):
# access and do something with the item in parse
item = response.meta['item']
item['other_url'] = response.url
return item
それが役立つことを願っています。
于 2013-11-19T22:06:03.120 に答える
7
要求された URL をどこかに保存する代わりに、スクレイピーで処理された URL は、 で提供されている順序と同じではありませんstart_urls
。
以下を使用することで、
response.request.meta['redirect_urls']
次のように発生したリダイレクトのリストが表示されます['http://requested_url','https://redirected_url','https://final_redirected_url']
上記のリストから最初の URL にアクセスするには、次を使用できます。
response.request.meta['redirect_urls'][0]
詳細については、次のように言及されているdoc.scrapy.orgを参照してください。
リダイレクトミドルウェア
This middleware handles redirection of requests based on response status.
(リダイレクト中に) リクエストが通過する URL は、redirect_urls
Request.metaキーで確認できます。
これがお役に立てば幸いです
于 2017-12-13T12:17:30.023 に答える