今日の IT 時代では、大量のデータをクロールすることが重要なスキルになっています。ビッグデータテクノロジーの急速な発展に伴い、データクローリングテクノロジーは常に更新され、改善されています。その中でも、Scrapy フレームワークは間違いなく最も一般的に使用され、人気のあるフレームワークであり、データのクローリングと処理において独自の利点と柔軟性を備えています。
この記事では、Scrapy フレームワークを使用して Flickr 画像ライブラリをクロールする方法を紹介します。 Flickr は、数億枚の写真と非常に大量のデータ リソースを保有する写真共有 Web サイトです。 Scrapy フレームワークを使用すると、これらのデータ リソースを簡単に取得し、調査と分析を実行したり、それらを使用してアプリケーション モデルを構築したりすることができ、ビッグ データの力をより効果的に活用できます。
1. Scrapy フレームワークの概要
Scrapy は、Python 言語に基づいたオープンソースの Web クローラー フレームワークです。 「効率」と「保守性」を設計コンセプトとしており、大規模なデータのクローリングと処理に適した包括的なクローラ フレームワークを実装しています。 Scrapy フレームワークのコア部分には、次の主要な機能モジュールが含まれています。
2. Flickr API キーの取得
データをクロールする前に、Flickr API キーを申請して、Flickr データベースへのアクセス許可を取得する必要があります。 Flickr 開発者 Web サイト (https://www.flickr.com/services/api/misc.api_keys.html) に登録することで API KEY を取得できます。具体的な申請手順は次のとおりです。
① まず、https://www.flickr.com/services/apps/create/apply/ URL を入力して API KEY を申請する必要があります。
②この Web サイトに入ったら、ログインする必要があります。アカウントをお持ちでない場合は、自分で登録する必要があります。
③ログイン後、Flickr 申請フォームに記入して送信する必要があります。フォームには、主に次の 2 つの情報を入力する必要があります。
④申請フォームに記入すると、システムは API KEY と SECRET を生成します。これら 2 つの情報を後で使用できるように保存する必要があります。
3. Scrapy フレームワークを使用した Flickr 画像ライブラリのスクレイピング実装
次に、Scrapy フレームワークを使用して Flickr 画像ライブラリのデータをクロールする方法を紹介します。
1. Scrapy クローラーを作成する
まず、新しい Scrapy プロジェクトを作成し、そのプロジェクト内にクローラー ファイルを作成する必要があります。クローラー ファイルでは、Flickr API データベースの基本情報とデータの保存場所を設定する必要があります。
import time import json import scrapy from flickr.items import FlickrItem class FlickrSpider(scrapy.Spider): name = 'flickr' api_key = 'YOUR_API_KEY' # 这里填写你自己的API Key tags = 'cat,dog' # 这里将cat和dog作为爬取的关键词,你可以自由定义 format = 'json' nojsoncallback = '1' page = '1' per_page = '50' start_urls = [ 'https://api.flickr.com/services/rest/?method=flickr.photos.search&' 'api_key={}' '&tags={}' '&page={}' '&per_page={}' '&format={}' '&nojsoncallback={}'.format(api_key, tags, page, per_page, format, nojsoncallback) ] def parse(self, response): results = json.loads(response.body_as_unicode()) for photo in results['photos']['photo']: item = FlickrItem() item['image_title'] = photo['title'] item['image_url'] = 'https://farm{}.staticflickr.com/{}/{}_{}.jpg'.format( photo['farm'], photo['server'], photo['id'], photo['secret']) yield item if int(self.page) <= results['photos']['pages']: self.page = str(int(self.page) + 1) next_page_url = 'https://api.flickr.com/services/rest/?method=flickr.photos.search&' 'api_key={}' '&tags={}' '&page={}' '&per_page={}' '&format={}' '&nojsoncallback={}'.format(self.api_key, self.tags, self.page, self.per_page, self.format, self.nojsoncallback) time.sleep(1) # 设置延时1秒钟 yield scrapy.Request(url=next_page_url, callback=self.parse)
クローラー ファイルでは、キーワード「cat」と「dog」を設定します。 Flickr 画像ライブラリ 、次にページめくりパラメータを設定し、形式を json に設定します。 parse 関数で各画像の情報を抽出して処理し、yield を使用して返しました。
次に、データの保存場所と形式を定義し、settings.py で設定する必要があります:
ITEM_PIPELINES = { 'flickr.pipelines.FlickrPipeline': 300, } IMAGES_STORE = 'images'
2. アイテム パイプラインの書き込み
次に、収集した画像データを処理して保存するアイテム パイプラインを作成する必要があります:
import scrapy from scrapy.pipelines.images import ImagesPipeline from scrapy.exceptions import DropItem class FlickrPipeline(object): def process_item(self, item, spider): return item class FlickrImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): for image_url in item['image_url']: try: yield scrapy.Request(image_url) except Exception as e: pass def item_completed(self, results, item, info): image_paths = [x['path'] for ok, x in results if ok] if not image_paths: raise DropItem("Item contains no images") item['image_paths'] = image_paths return item
3. プログラムを実行します
上記の作業が完了したら、コードを記述した後、Scrapy フレームワークを実行してデータ クローリング操作を実装できます。コマンド ラインに次の指示を入力する必要があります。
scrapy crawl flickr
プログラムの実行が開始されると、クローラーは Flickr データベース内の「猫」と「犬」に関する写真をクロールし、指定された場所に写真を保存します。保管場所は真ん中。
4. 概要
この記事の導入部を通じて、Scrapy フレームワークを使用して Flickr 画像ライブラリをクロールする方法を詳しく学びました。実際のアプリケーションでは、必要に応じてキーワード、ページ数、または画像ストレージのパスを変更できます。 Scrapy フレームワークはどの側面から見ても成熟した機能豊富なクローラ フレームワークであり、常に更新される機能と柔軟な拡張性により、データ クローリング作業を強力にサポートします。
以上がScrapy フレームワークを使用して Flickr 画像ライブラリをクロールするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。