0

クローラーを使用してサイトから画像をダウンロードしようとしています。

私のクローラーは正常に動作していて、データベースに問題が発生しています

これはscrapyのデバッグです

2012-12-20 09:25:23+0800 [working] DEBUG: Crawled (200) <GET http://www.example.com/images/28_34.jpg> (referer: None)
2012-12-20 09:25:23+0800 [working] DEBUG: Image (downloaded): Downloaded image from <GET http://www.example.com/images/28_34.jpg> referred in <None>
2012-12-20 09:25:23+0800 [working] WARNING: 'image_downloaded hook failed'
2012-12-20 09:25:23+0800 [working] DEBUG: Scraped from <200 http://www.example.com/profile.php>
        {'image_urls': ['http://www.example.com/images/28_34.jpg'],
         'number_pts': [u'5710'],
         'profile_link': [u'profile.php'],
         'title': [u'test1']}

scrapy.contrib.pipeline.images.ImagesPipeline設定と画像ストアでも設定しました

4

1 に答える 1

1

問題に関連するscrapyにバグはありません。

ImagesPipelineを使用して画像をダウンロードするには、アイテムでこれら2つのフィールドを定義する必要があります。

image_urls = Field()
images = Field()

1)スパイダーでは、アイテムをスクレイプし、その画像のURLをimage_urlsフィールドに入力します。

2)アイテムはスパイダーから返され、アイテムパイプラインに送られます。

3)アイテムがImagesPipelineに到達すると、image_urlsフィールドのURLは、標準のScrapyスケジューラーとダウンローダーを使用してダウンロードするようにスケジュールされます(つまり、スケジューラーとダウンローダーのミドルウェアが再利用されます)が、優先度が高く、他のページよりも先に処理されます。削りました。アイテムは、画像のダウンロードが完了するまで(または何らかの理由で失敗するまで)、その特定のパイプライン段階で「ロック」されたままになります。

4)画像がダウンロードされると、別のフィールド(画像)に結果が表示されます。このフィールドには、ダウンロードされたパス、元のスクレイプされたURL(image_urlsフィールドから取得)、画像のチェックサムなど、ダウンロードされた画像に関する情報を含むdictのリストが含まれます。画像フィールドのリスト内の画像は、元のimage_urlsフィールドと同じ順序を保持します。一部の画像のダウンロードに失敗した場合、エラーがログに記録され、画像は画像フィールドに表示されません。

于 2012-12-19T09:43:13.193 に答える