ホームページ  >  記事  >  バックエンド開発  >  Scrapyを使用してファイルをバッチダウンロードまたはアップロードするにはどうすればよいですか?

Scrapyを使用してファイルをバッチダウンロードまたはアップロードするにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-23 09:37:391784ブラウズ

Scrapy は、クローラーの開発および展開プロセスを大幅に簡素化できる強力な Python クローラー フレームワークです。実際のアプリケーションでは、多くの場合、Scrapy を使用して、画像、オーディオ、ビデオ リソースなどのファイルをバッチでダウンロードまたはアップロードする必要があります。この記事では、Scrapyを使ってこれらの機能を実装する方法を紹介します。

  1. ファイルのバッチダウンロード

Scrapy は、ファイルをバッチでダウンロードする複数の方法を提供します。最も簡単な方法は、組み込みの ImagePipeline または FilesPipeline を使用することです。これら 2 つのパイプラインは、HTML ページから画像またはファイル リンクを自動的に抽出し、ローカル ディスクにダウンロードできます。

これら 2 つのパイプラインを使用するには、Scrapy プロジェクトの settings.py ファイルで設定する必要があります。たとえば、画像をダウンロードする場合は、次のように構成できます。

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = '/path/to/download/folder'

ここで、ITEM_PIPELINES はパイプのリストであり、最初の位置に ImagesPipeline を追加します。 IMAGES_STORE は、ダウンロードしたファイルの保存パスです。

次に、クローラーの items.py ファイルでダウンロードするファイルの種類を定義する必要があります。写真の場合、次のように定義できます。

import scrapy

class MyItem(scrapy.Item):
    name = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()

このうち、name は写真の名前、image_urls は写真のリンクのリスト、images はダウンロードされた写真の場所です。

Spider.py ファイルで、アイテムに画像リンクを追加し、アイテムをパイプライン キューに入れる必要があります。例:

import scrapy
from myproject.items import MyItem

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        item = MyItem()
        item['name'] = 'example'
        item['image_urls'] = ['http://example.com/image.jpg']
        yield item

このようにして、Scrapy を実行すると、サンプル Web サイトから画像が自動的にダウンロードされ、指定されたフォルダーに保存されます。 PDF やビデオなど、他の種類のファイルをダウンロードしたい場合は、FilesPipeline を使用できます。この方法は ImagePipeline に似ています。settings.py ファイルで ImagePipeline を FilesPipeline に置き換え、ダウンロードするファイルの種類を定義するだけです。 items.py ファイルに追加し、対応するリンクと項目を Spider.py ファイルに追加します。

  1. ファイルのバッチアップロード

ファイルのダウンロードに加えて、Scrapy はファイルをバッチでアップロードすることもできます。ローカル ディスクからリモート サーバーにファイルをアップロードする必要があるとします。Scrapy が提供する FormRequest を使用できます。

Spider.py ファイルでは、FormRequest を使用して POST リクエストを作成し、ローカル ファイルをバイナリ データとしてサーバーに送信できます。例:

import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        with open('/path/to/local/file', 'rb') as f:
            data = f.read()
        
        yield scrapy.FormRequest('http://example.com/upload',
                                 formdata={'file': data},
                                 callback=self.parse_result)
    
    def parse_result(self, response):
        # 处理上传结果

上の例では、ローカル ファイルを開き、ファイルの内容を読み取り、それをバイナリ データとしてサーバーに送信します。リクエストを受信したサーバーは、指定されたディレクトリにファイルを保存し、アップロード結果を返します。 parse_result 関数では、アップロード結果の印刷、アップロード結果の保存など、アップロード結果を処理できます。

概要

Scrapy は、ファイルをバッチでダウンロードまたはアップロードする複数の方法を提供します。画像やドキュメントなどの最も一般的なファイルの種類については、組み込みの ImagePipeline または FilesPipeline を使用してローカル ディスクに自動的にダウンロードできます。他の種類のファイルの場合は、FormRequest を使用して POST リクエストを作成し、ローカル ファイルをバイナリ データとしてサーバーに送信できます。 Scrapy を使用してファイルをバッチでダウンロードまたはアップロードすると、ワークロードが大幅に簡素化され、効率が向上します。

以上がScrapyを使用してファイルをバッチダウンロードまたはアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。