このような問題が発生した現在のURLを保存しておき、同じparse
機能を使用して続行するとscrapy.Request
に渡すことができます。
何かがresponse.body
使用して訪問しているウェブサイトで印刷されているかどうかを確認することができますが、その後、通常通り継続されていない場合は、悪い何かが、その後yield
新しいscrapy.Request
起こったのです。たぶん
:使用方法は再びparse
機能は、あなたがキャッチしたい「例外」に大きく依存していること
def parse(self, response):
current_url = response.request.url
if 'Some or none message in the body' in response.body:
yield scrapy.Request(current_url, callback=self.parse)
else:
item = ContentsPageSFBItem()
content_items = response.xpath('//ol[@class="detail-toc"]//a/text()').extract()
for content_item in content_items:
item['content_item'] = content_item
item['full_url'] = response.url
item['title'] = response.xpath('//title[1]/text()').extract()
yield item
注意。まず、第1の格納するための3つのグローバル変数を作成するための
:あなたがしているURLに応じて、異なるファイルにデータを書き込みたい念頭に置い
は
、その後、私は少しにコードを微調整しました2番目のurl、およびフィールドを配列として返します。 n注これは、これらの2つのURLのために有用であろうが、彼らはそれは難しいだろう成長して起動した場合:
global first_url, second_url, fields
fields = []
first_url = 'https://www.safaribooksonline.com/library/view/shell-programming-in/9780134496696/'
second_url = 'https://www.safaribooksonline.com/library/view/cisa-certified-information/9780134677453/'
start_urls = [first_url, second_url]
次に、あなたのparse
関数内では、データを取得し、第二に渡されますfields
配列、それを保存します関数parse_and_write_csv
は、現在のURLに応じてすべてのファイルを作成して書き込みます。
def parse(self, response):
item = ContentsPageSFBItem()
content_items = response.xpath('//ol[@class="detail-toc"]//a/text()').extract()
url = response.request.url
for content_item in content_items:
item['content_item'] = content_item
item['full_url'] = response.url
item['title'] = response.xpath('//title[1]/text()').extract()
fields = [item['content_item'].encode('utf-8'), item['full_url'], item['title'][0]]
self.parse_and_write_csv(response, fields)
parse_and_write_csv
は、フィールドを取得し、それはURLから作成された配列から5番目の要素を取得し、CSVファイルを作成するか、それが既に存在する場合はそれを開き、URLに応じました。
def parse_and_write_csv(self, response, fields):
with open("%s.csv" % response.request.url.split('/')[5], 'a+') as file:
file.write("{}\n".format(';'.join(str(field)
for field in fields)))
希望します。 gistが表示されます。
URLごとに別々のcsvを作成する方法を知りたい。また、例外のために反復をスキップしたいと思います。しかし、これを修正するファイルはどれですか? –
私はあなたが達成しようとしているものを再現しようとしました。 –
あなたは 'start_urls'としてどういう意味ですか? –