Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie das Scrapy-Framework, um die Flickr-Bildbibliothek zu crawlen

Verwenden Sie das Scrapy-Framework, um die Flickr-Bildbibliothek zu crawlen

WBOY
WBOYOriginal
2023-06-22 11:02:07702Durchsuche

Im heutigen Zeitalter der Informationstechnologie ist das Crawlen großer Datenmengen zu einer wichtigen Fähigkeit geworden. Mit der rasanten Entwicklung der Big-Data-Technologie wird die Daten-Crawling-Technologie ständig aktualisiert und verbessert. Unter diesen ist das Scrapy-Framework zweifellos das am häufigsten verwendete und beliebteste Framework. Es bietet einzigartige Vorteile und Flexibilität beim Crawlen und Verarbeiten von Daten.

In diesem Artikel erfahren Sie, wie Sie das Scrapy-Framework zum Crawlen der Flickr-Bildbibliothek verwenden. Flickr ist eine Website zum Teilen von Bildern mit einem Bestand von Hunderten Millionen Bildern und einer sehr großen Menge an Datenressourcen. Durch die Verwendung des Scrapy-Frameworks können wir diese Datenressourcen problemlos abrufen, Recherchen und Analysen durchführen oder sie zum Erstellen von Anwendungsmodellen verwenden, um die Leistungsfähigkeit von Big Data besser zu nutzen.

1. Einführung in das Scrapy-Framework

Scrapy ist ein Open-Source-Webcrawler-Framework, das auf der Python-Sprache basiert. Das Designkonzept basiert auf „Effizienz“ und „Wartbarkeit“ und implementiert ein umfassendes Crawler-Framework, das sich besser zum Crawlen und Verarbeiten großer Datenmengen eignet. Der Kernbestandteil des Scrapy-Frameworks umfasst die folgenden Hauptfunktionsmodule:

  • Engine: Verantwortlich für die Verarbeitung des Datenflusses des gesamten Systems und die Steuerung der Interaktion und Datenübertragung zwischen verschiedenen Komponenten.
  • Scheduler: Verantwortlich für das Sortieren der von der Engine gesendeten Anfragen und deren Übermittlung an den Downloader.
  • Downloader (Downloader): Verantwortlich für das Herunterladen von Webinhalten, die Verarbeitung der von der Webseite zurückgegebenen Inhalte und die anschließende Übergabe an die Engine.
  • Parser (Spider): Verantwortlich für das Parsen der vom Downloader heruntergeladenen Webseiten, das Extrahieren der gewünschten Daten und deren Organisation in strukturierten Daten.
  • Pipeline: Verantwortlich für die anschließende Verarbeitung der verarbeiteten Daten, z. B. das Speichern in einer Datenbank oder Datei usw.

2. Besorgen Sie sich den Flickr-API-Schlüssel

Bevor wir Daten crawlen, müssen wir den Flickr-API-Schlüssel beantragen, um die Erlaubnis zum Zugriff auf die Flickr-Datenbank zu erhalten. Auf der Flickr-Entwickler-Website (https://www.flickr.com/services/api/misc.api_keys.html) können wir durch Registrierung einen API-SCHLÜSSEL erhalten. Die spezifischen Antragsschritte sind wie folgt:

① Zuerst müssen wir die URL https://www.flickr.com/services/apps/create/apply/ eingeben, um den API-SCHLÜSSEL zu beantragen.

②Nachdem wir diese Website betreten haben, müssen wir uns anmelden. Wenn wir noch kein Konto haben, müssen wir selbst eines registrieren.

③Nachdem Sie sich angemeldet haben, müssen Sie das Flickr-Bewerbungsformular ausfüllen und abschicken. Im Formular müssen Sie hauptsächlich zwei Informationsaspekte ausfüllen:

  • Der Name einer kleinen Bewerbung
  • Eine Beschreibung eines „nichtkommerziellen“ Zwecks

④Nach dem Ausfüllen des Bewerbungsformulars generiert das System ein API-SCHLÜSSEL und ein GEHEIMNIS. Wir müssen diese beiden Informationen zur späteren Verwendung speichern.

3. Implementierung der Crawling-Flickr-Bildbibliothek mit dem Scrapy-Framework

Als nächstes stellen wir vor, wie man das Scrapy-Framework zum Crawlen von Flickr-Bildbibliotheksdaten verwendet.

1. Scrapy-Crawler schreiben

Zuerst müssen wir ein neues Scrapy-Projekt erstellen und eine Crawler-Datei im Projekt erstellen. In der Crawler-Datei müssen wir die grundlegenden Informationen der Flickr-API-Datenbank und den Speicherort der Daten festlegen:

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)

In der Crawler-Datei legen wir die Schlüsselwörter „Katze“ und „Hund“ der Flickr-Bildbibliothek fest. und dann festlegen Geben Sie die Umblätterparameter an und stellen Sie das Format auf JSON ein. Wir haben die Informationen jedes Bildes in der Parse-Funktion extrahiert, verarbeitet und sie mithilfe von yield zurückgegeben.

Als nächstes müssen wir den Speicherort und das Format der Daten definieren und in Settings.py festlegen:

ITEM_PIPELINES = {
   'flickr.pipelines.FlickrPipeline': 300,
}

IMAGES_STORE = 'images'

2 Schreiben Sie eine Item-Pipeline

Als nächstes müssen wir eine Item-Pipeline schreiben, um die zu sammeln Die gesammelten Daten werden verarbeitet und gespeichert:

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. Führen Sie das Programm aus.

Nachdem wir das obige Codeschreiben abgeschlossen haben, können wir das Scrapy-Framework ausführen, um Daten-Crawling-Vorgänge zu implementieren. Wir müssen den folgenden Befehl in die Befehlszeile eingeben:

scrapy crawl flickr

Nachdem das Programm gestartet wurde, crawlt der Crawler die Bilder von „Katze“ und „Hund“ in der Flickr-Datenbank und speichert die Bilder am angegebenen Speicherort.

4. Zusammenfassung

Durch die Einleitung dieses Artikels haben wir im Detail gelernt, wie man das Scrapy-Framework zum Crawlen der Flickr-Bildbibliothek verwendet. In tatsächlichen Anwendungen können wir Schlüsselwörter, die Anzahl der Seiten oder den Pfad der Bildspeicherung entsprechend unseren eigenen Anforderungen ändern. Egal aus welcher Perspektive, das Scrapy-Framework ist ein ausgereiftes und funktionsreiches Crawler-Framework. Seine ständig aktualisierten Funktionen und seine flexible Skalierbarkeit bieten eine starke Unterstützung für unsere Daten-Crawling-Arbeit.

Das obige ist der detaillierte Inhalt vonVerwenden Sie das Scrapy-Framework, um die Flickr-Bildbibliothek zu crawlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn