Rumah >pembangunan bahagian belakang >Tutorial Python >Gunakan rangka kerja Scrapy untuk merangkak pustaka imej Flickr
Dalam era teknologi maklumat hari ini, merangkak data besar-besaran telah menjadi kemahiran penting. Dengan perkembangan pesat teknologi data besar, teknologi merangkak data sentiasa dikemas kini dan dipertingkatkan. Antaranya, rangka kerja Scrapy sudah pasti rangka kerja yang paling biasa digunakan dan popular. Ia mempunyai kelebihan dan fleksibiliti unik dalam rangkak dan pemprosesan data.
Artikel ini akan memperkenalkan cara menggunakan rangka kerja Scrapy untuk merangkak pustaka imej Flickr. Flickr ialah tapak web perkongsian gambar dengan ratusan juta gambar dalam inventorinya dan jumlah sumber data yang sangat besar. Melalui penggunaan rangka kerja Scrapy, kami boleh mendapatkan sumber data ini dengan mudah, menjalankan penyelidikan dan analisis, atau menggunakannya untuk membina model aplikasi, supaya dapat memanfaatkan kuasa data besar dengan lebih baik.
1. Pengenalan kepada rangka kerja Scrapy
Scrapy ialah rangka kerja perangkak web sumber terbuka berdasarkan bahasa Python. Ia memerlukan "kecekapan" dan "kebolehselenggaraan" sebagai konsep reka bentuknya dan melaksanakan rangka kerja perangkak yang komprehensif, yang lebih sesuai untuk merangkak dan memproses data berskala besar. Bahagian teras rangka kerja Scrapy termasuk modul fungsi utama berikut:
2. Dapatkan Kunci API Flickr
Sebelum merangkak data, kami perlu memohon Kunci API Flickr untuk mendapatkan kebenaran mengakses pangkalan data Flickr. Dalam tapak web pembangun Flickr (https://www.flickr.com/services/api/misc.api_keys.html), kami boleh mendapatkan API KEY dengan mendaftar. Langkah-langkah aplikasi khusus adalah seperti berikut:
① Pertama, kita perlu memasukkan https://www.flickr.com/services/apps/create/apply/ URL untuk memohon API KEY.
②Selepas memasuki laman web ini, kita perlu log masuk. Jika kita tidak mempunyai akaun, kita perlu mendaftarkannya sendiri.
③Selepas log masuk, anda perlu mengisi dan menyerahkan borang permohonan Flickr. Dalam borang, anda perlu mengisi dua aspek maklumat:
④Selepas melengkapkan borang permohonan, sistem akan menjana API KUNCI dan RAHSIA. Kita perlu menyimpan dua maklumat ini untuk kegunaan kemudian.
3. Pelaksanaan mengikis perpustakaan imej Flickr dengan rangka kerja Scrapy
Seterusnya, kami akan memperkenalkan cara menggunakan rangka kerja Scrapy untuk merangkak data perpustakaan imej Flickr.
1. Tulis perangkak Scrapy
Pertama, kita perlu mencipta projek Scrapy baharu dan mencipta fail perangkak dalam projek. Dalam fail perangkak, kami perlu menetapkan maklumat asas pangkalan data API Flickr dan lokasi penyimpanan data:
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)
Dalam fail perangkak, kami menetapkan kata kunci "kucing" dan "anjing" bagi Pustaka imej Flickr , dan kemudian tetapkan parameter perubahan halaman dan tetapkan format kepada json. Kami mengekstrak dan memproses maklumat setiap imej dalam fungsi parse dan mengembalikannya menggunakan hasil.
Seterusnya, kita perlu mentakrifkan lokasi storan dan format data, dan menetapkannya dalam tetapan.py:
ITEM_PIPELINES = { 'flickr.pipelines.FlickrPipeline': 300, } IMAGES_STORE = 'images'
2 Write Item Pipeline
Seterusnya, kita perlu menulis Talian Paip Item untuk memproses dan menyimpan data imej yang dikumpul:
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 Jalankan program
Apabila kami melengkapkan perkara di atas Selepas menulis kod, anda boleh menjalankan rangka kerja Scrapy untuk melaksanakan operasi merangkak data. Kita perlu memasukkan arahan berikut dalam baris arahan:
scrapy crawl flickr
Selepas program mula berjalan, perangkak akan merangkak imej "kucing" dan "anjing" dalam pangkalan data Flickr dan menyimpan imej dalam yang ditentukan tengah lokasi penyimpanan.
4. Ringkasan
Melalui pengenalan artikel ini, kami telah mempelajari secara terperinci cara menggunakan rangka kerja Scrapy untuk merangkak pustaka imej Flickr. Dalam aplikasi sebenar, kita boleh mengubah suai kata kunci, bilangan halaman, atau laluan storan imej mengikut keperluan kita sendiri. Tidak kira dari aspek mana, rangka kerja Scrapy ialah rangka kerja perangkak yang matang dan kaya dengan ciri Fungsinya yang sentiasa dikemas kini dan kebolehskalaan fleksibel memberikan sokongan kuat untuk kerja rangkak data kami.
Atas ialah kandungan terperinci Gunakan rangka kerja Scrapy untuk merangkak pustaka imej Flickr. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!