Maison >développement back-end >Tutoriel Python >Utilisez le framework Scrapy pour explorer la bibliothèque d'images Flickr

Utilisez le framework Scrapy pour explorer la bibliothèque d'images Flickr

WBOY
WBOYoriginal
2023-06-22 11:02:07785parcourir

À l’ère actuelle des technologies de l’information, l’exploration de données massives est devenue une compétence importante. Avec le développement rapide de la technologie du Big Data, la technologie d’exploration des données est constamment mise à jour et améliorée. Parmi eux, le framework Scrapy est sans aucun doute le framework le plus couramment utilisé et le plus populaire. Il présente des avantages et une flexibilité uniques dans l'exploration et le traitement des données.

Cet article expliquera comment utiliser le framework Scrapy pour explorer la bibliothèque d'images Flickr. Flickr est un site Web de partage d'images avec des centaines de millions d'images dans son inventaire et une très grande quantité de ressources de données. Grâce à l'utilisation du framework Scrapy, nous pouvons facilement obtenir ces ressources de données, effectuer des recherches et des analyses, ou les utiliser pour créer des modèles d'application, afin de mieux utiliser la puissance du Big Data.

1. Introduction au framework Scrapy

Scrapy est un framework de robot d'exploration Web open source basé sur le langage Python. Il prend « l'efficacité » et la « maintenabilité » comme concepts de conception et met en œuvre un cadre d'exploration complet, plus adapté à l'exploration et au traitement de données à grande échelle. La partie centrale du framework Scrapy comprend les principaux modules fonctionnels suivants :

  • Moteur : Responsable du traitement du flux de données de l'ensemble du système et du contrôle de l'interaction et du transfert de données entre les différents composants.
  • Scheduler : Responsable du tri des requêtes envoyées par le moteur et de leur transmission au Downloader.
  • Downloader (Téléchargeur) : responsable du téléchargement du contenu Web, du traitement du contenu renvoyé par la page Web, puis de sa transmission au moteur.
  • Parser (Spider) : Responsable de l'analyse des pages Web téléchargées par le téléchargeur, de l'extraction des données souhaitées et de leur organisation en données structurées.
  • Pipeline : responsable du traitement ultérieur des données traitées, tel que l'enregistrement dans une base de données ou un fichier, etc.

2. Obtenir la clé API Flickr

Avant d'explorer les données, nous devons demander la clé API Flickr pour obtenir l'autorisation d'accéder à la base de données Flickr. Sur le site Web des développeurs Flickr (https://www.flickr.com/services/api/misc.api_keys.html), nous pouvons obtenir une CLÉ API en nous inscrivant. Les étapes de candidature spécifiques sont les suivantes :

① Tout d'abord, nous devons saisir l'URL https://www.flickr.com/services/apps/create/apply/ pour demander la clé API.

②Après avoir accédé à ce site Web, nous devons nous connecter. Si nous n'avons pas de compte, nous devons en créer un nous-mêmes.

③Après vous être connecté, vous devez remplir et soumettre le formulaire de candidature Flickr. Dans le formulaire, vous devez principalement renseigner deux informations :

  • Le nom d'une petite candidature
  • Une description d'un objectif "non commercial"

④Après avoir rempli le formulaire de candidature, le système générera une CLÉ API et un SECRET . Nous devons sauvegarder ces deux informations pour une utilisation ultérieure.

3. Implémentation de l'exploration de la bibliothèque d'images Flickr avec le framework Scrapy

Ensuite, nous présenterons comment utiliser le framework Scrapy pour explorer les données de la bibliothèque d'images Flickr.

1. Écrire le robot Scrapy

Tout d'abord, nous devons créer un nouveau projet Scrapy et créer un fichier de robot dans le projet. Dans le fichier crawler, nous devons définir les informations de base de la base de données API Flickr et l'emplacement de stockage des données :

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)

Dans le fichier crawler, nous définissons les mots-clés « chat » et « chien » de la bibliothèque d'images Flickr, puis définissez Spécifiez les paramètres de rotation de page et définissez le format sur json. Nous avons extrait et traité les informations de chaque image dans la fonction d'analyse et les avons renvoyées en utilisant le rendement.

Ensuite, nous devons définir l'emplacement de stockage et le format des données, et les définir dans settings.py :

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

IMAGES_STORE = 'images'

2 Écrire un pipeline d'articles

Ensuite, nous devons écrire un pipeline d'articles pour collecter les données collectées. Les données d'image sont traitées et stockées :

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. Exécutez le programme

Après avoir terminé l'écriture du code ci-dessus, nous pouvons exécuter le framework Scrapy pour implémenter les opérations d'exploration des données. Nous devons entrer la commande suivante dans la ligne de commande :

scrapy crawl flickr

Après le démarrage du programme, le robot explorera les images de "chat" et "chien" dans la base de données Flickr et enregistrera les images dans l'emplacement de stockage spécifié.

4. Résumé

Grâce à l'introduction de cet article, nous avons appris en détail comment utiliser le framework Scrapy pour explorer la bibliothèque d'images Flickr. Dans les applications réelles, nous pouvons modifier les mots-clés, le nombre de pages ou le chemin de stockage des images en fonction de nos propres besoins. Quel que soit l'aspect sous lequel, le framework Scrapy est un framework d'exploration mature et riche en fonctionnalités. Ses fonctions constamment mises à jour et son évolutivité flexible offrent un soutien solide à notre travail d'exploration de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn