scrapy内蔵画像とファイルのダウンロード方法MediaPipeline
3265 ワード
scrapyのMediaPipelineは、一般的にFilePipelineとImagesPipelineを使用します.
最近ダウンロードしたデータの再ダウンロードを避ける
保管場所と方法の指定
ImagesPipelineでは、追加の機能も提供されています.
ダウンロードしたすべての画像を共通のフォーマットとモードに変換
サムネイルの生成
画像の幅/高さを検出し、最小の制限を満たすことを確認します.
FilePipelineを使用する場合、典型的なワークフロー:
1.爬虫類の中からitemを取り出し、ファイルのURLをfile_に入れるurls内
2.item爬虫類から戻り、Item Pipelineに入る
3.入ってfile_urls内のURLはscrapyのスケジューラとダウンロードによってダウンロードされます.
Images Pipelineを使用する場合のワークフローは大きく異なります.
File Pipelineを使用するには:
settingsでのITEM_PIPELINEで設定'scrapy.pipelines.files.FilePipeline':1
itemに2つのフィールドを追加します.
file_urls = scrapy.Field()
files = scrapy.Field()
settingsにダウンロードパスFILES_を追加STORE、ファイルurlが存在するitemフィールド、およびファイル結果情報のitemフィールドFILE_RESULT_FIELD
FILES_STORE = 'D:\\file_path'
FILES_URLS_FIELD = 'file_urls'
FILES_RESULT_FIELD = 'files'
FILES_の使用EXPIRES設定有効期限
FILES_EXPIRES=30日で期限切れ
ImagesPipelineを使用すると、さまざまな機能が追加されます.
IMAGESの使用THUMBSはサムネイルを作成しIMAGES_を使用EXPIRES設定有効期限:
IMAGES_THUMBS = {
'small':(50,50),
'big':(270,270)
}
IMAGES_EXPIRES=30日有効期限切れ
小さな画像をフィルタリングしたい場合は、IMAGES_MIN_HEIGHTおよびIMAGES_MIN_WIDTHを使用して、画像の最小高さ和を設定できます.
自分のファイル名を書き換えられる保存方法
独自のテキストフォーマットを作成して保存することもできます.
FEED_EXPORT_FIELDSでは、データフィールドを保存する順番を設定できます
最近ダウンロードしたデータの再ダウンロードを避ける
保管場所と方法の指定
ImagesPipelineでは、追加の機能も提供されています.
ダウンロードしたすべての画像を共通のフォーマットとモードに変換
サムネイルの生成
画像の幅/高さを検出し、最小の制限を満たすことを確認します.
FilePipelineを使用する場合、典型的なワークフロー:
1.爬虫類の中からitemを取り出し、ファイルのURLをfile_に入れるurls内
2.item爬虫類から戻り、Item Pipelineに入る
3.入ってfile_urls内のURLはscrapyのスケジューラとダウンロードによってダウンロードされます.
Images Pipelineを使用する場合のワークフローは大きく異なります.
File Pipelineを使用するには:
settingsでのITEM_PIPELINEで設定'scrapy.pipelines.files.FilePipeline':1
itemに2つのフィールドを追加します.
file_urls = scrapy.Field()
files = scrapy.Field()
settingsにダウンロードパスFILES_を追加STORE、ファイルurlが存在するitemフィールド、およびファイル結果情報のitemフィールドFILE_RESULT_FIELD
FILES_STORE = 'D:\\file_path'
FILES_URLS_FIELD = 'file_urls'
FILES_RESULT_FIELD = 'files'
FILES_の使用EXPIRES設定有効期限
FILES_EXPIRES=30日で期限切れ
ImagesPipelineを使用すると、さまざまな機能が追加されます.
IMAGESの使用THUMBSはサムネイルを作成しIMAGES_を使用EXPIRES設定有効期限:
IMAGES_THUMBS = {
'small':(50,50),
'big':(270,270)
}
IMAGES_EXPIRES=30日有効期限切れ
小さな画像をフィルタリングしたい場合は、IMAGES_MIN_HEIGHTおよびIMAGES_MIN_WIDTHを使用して、画像の最小高さ和を設定できます.
自分のファイル名を書き換えられる保存方法
class MyFilesPipeline(FilesPipeline):
def file_path(self, request, response=None, info=None):
split_url = str(request.url).split('/')
kind_name = split_url[-2]
file_name = split_url[-1]
return '%s/%s'%(kind_name,file_name)
# path = urlparse(request.url).path
# return join(basename(dirname(path)),basename(path))
settingsで設定ITEM_PIPELINES = {
#'scrapy.pipelines.files.FilesPipeline':1
'download_files.pipelines.MyFilesPipeline':1
# 'download_files.pipelines.DownloadFilesPipeline': 300,
}
独自のテキストフォーマットを作成して保存することもできます.
class ExcelItemExporter(BaseItemExporter):
def __init__(self,file,**kwargs):
self._configure(kwargs)
self.file = file
self.row = 0
self.wb = xlwt.Workbook()
self.sheet = self.wb.add_sheet('books')
def finish_exporting(self):
self.wb.save(self.file)
def export_item(self, item):
items = self._get_serialized_fields(item)
for col,v in enumerate(x for _,x in items):
self.sheet.write(self.row,col,v)
self.row +=1
は、settingsで構成されます.FEED_EXPORTERS = {'excel':'douban_books.my_exporter.ExcelItemExporter'}
FEED_EXPORT_FIELDS = ['url','ISBN','name','author','publish','publish_time','subtitle','price','pages','series','about_author','content']
FEED_EXPORT_FIELDSでは、データフィールドを保存する順番を設定できます