Introduction à Scrapy (2)

Introduction à Scrapy (2)

introduction

Introduction à Scrapy (1)

Dans l'article précédent, comme première étape dans Scrapy, j'ai créé un simple Spider et essayé le processus d'extraction d'URL. Scrapy peut acquérir non seulement des pages Web, mais également des résultats d'API Web et un traitement de téléchargement d'images. Cette fois, créons un Spider qui appelle l'API Web et enregistre le résultat.

Créer une araignée

Créez une araignée pour obtenir des informations sur la station en fonction de la liste des codes postaux. Pour obtenir le code postal, utilisez l'API (http://geoapi.heartrails.com/api.html) fournie par HeartRails. L'Araignée ressemble à ceci:

get_station_spider.py


# -*- encoding:utf-8 -*-

import json

from scrapy import Spider
from scrapy.http import Request


class GetStationSpider(Spider):
    name = "get_station_spider"
    allowed_domains = ["express.heartrails.com"]
    end_point = "http://geoapi.heartrails.com/api/json?method=getStations&postal=%s"

    custom_settings = {
        "DOWNLOAD_DELAY": 1.5,
    }

    #Liste des codes postaux (obtenus à l'origine de DB, etc.)
    postal_list = [
        1080072,
        1050013,
        1350063,
        1020072,
        9012206,
    ]

    #Cette méthode est appelée au démarrage de Spider. Faites une demande pour appeler l'API.
    def start_requests(self):
        for postal in self.postal_list:
            url = self.end_point % postal
            yield Request(url, self.parse)

    #Une méthode appelée une fois le téléchargement terminé. Extraire les informations de la réponse et les renvoyer au format dictionnaire
    def parse(self, response):
        response = json.loads(response.body)
        result = response['response']['station'][0]

        yield {
            'postal': result["postal"],
            'name': result["name"],
            'line': result["line"],
            'latitude': result["y"],
            'longitude': result["x"],
            'prev': result['prev'],
            'next': result['next'],
        }

Courir

Comme précédemment, utilisez les commandes fournies avec Scrapy pour analyser. Utilisez l'option -o pour imprimer les résultats de l'analyse dans stations.json.

scrapy runspider get_station_spider.py -o stations.json

résultat

[
  {
    "prev": "\u767d\u91d1\u53f0",
    "name": "\u767d\u91d1\u9ad8\u8f2a",
    "longitude": 139.734286,
    "next": "\u4e09\u7530",
    "latitude": 35.643147,
    "line": "\u90fd\u55b6\u4e09\u7530\u7dda",
    "postal": "1080072"
  },
  {
    "prev": null,
    "name": "\u30e2\u30ce\u30ec\u30fc\u30eb\u6d5c\u677e\u753a",
    "longitude": 139.75667,
    "next": "\u5929\u738b\u6d32\u30a2\u30a4\u30eb",
    "latitude": 35.655746,
    "line": "\u6771\u4eac\u30e2\u30ce\u30ec\u30fc\u30eb\u7fbd\u7530\u7dda",
    "postal": "1050013"
  },
  {
    "prev": "\u9752\u6d77",
    "name": "\u56fd\u969b\u5c55\u793a\u5834\u6b63\u9580",
    "longitude": 139.7913,
    "next": "\u6709\u660e",
    "latitude": 35.630212,
    "line": "\u65b0\u4ea4\u901a\u3086\u308a\u304b\u3082\u3081",
    "postal": "1350063"
  },
  {
    "prev": "\u795e\u697d\u5742",
    "name": "\u98ef\u7530\u6a4b",
    "longitude": 139.746657,
    "next": "\u4e5d\u6bb5\u4e0b",
    "latitude": 35.701332,
    "line": "\u6771\u4eac\u30e1\u30c8\u30ed\u6771\u897f\u7dda",
    "postal": "1020072"
  },
  {
    "prev": "\u5e02\u7acb\u75c5\u9662\u524d",
    "name": "\u5100\u4fdd",
    "longitude": 127.719295,
    "next": "\u9996\u91cc",
    "latitude": 26.224491,
    "line": "\u6c96\u7e04\u3086\u3044\u30ec\u30fc\u30eb",
    "postal": "9030821"
  }
]

À la fin

Avec Scrapy, il est très facile d'écrire tout, de l'appel d'une API Web à la sauvegarde des résultats de l'exécution. Les développeurs n'ont besoin que de créer des classes et des fonctions appelées du côté du framework, il est donc possible de se concentrer sur les parties les plus essentielles. La prochaine fois, je couvrirai le processus de téléchargement des fichiers image. impatient de!

Recommended Posts

Introduction à Scrapy (1)
Introduction à Scrapy (3)
Introduction à Scrapy (2)
Introduction à Scrapy (4)
Introduction à MQTT (Introduction)
Introduction à Tkinter 1: Introduction
Introduction à PyQt
[Linux] Introduction à Linux
Introduction à discord.py (2)
Introduction à Lightning Pytorch
Premiers pas avec le Web Scraping
Introduction aux baies non paramétriques
Introduction à EV3 / MicroPython
Introduction au langage Python
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à Private Chainer
Introduction à l'apprentissage automatique
Introduction à l'algorithme de recherche de dictionnaire
Introduction à la méthode Monte Carlo
[Mémorandum d'apprentissage] Introduction à vim
Introduction à PyTorch (1) Différenciation automatique
opencv-python Introduction au traitement d'image
Introduction à Python Django (2) Win
Introduction à l'écriture de Cython [Notes]
Introduction à Private TensorFlow
Une introduction à l'apprentissage automatique
[Introduction à cx_Oracle] Présentation de cx_Oracle
Une super introduction à Linux
introduction
AOJ Introduction à la programmation Sujet n ° 7, Sujet n ° 8
Introduction à la détection des anomalies 1 principes de base
Introduction à RDB avec sqlalchemy Ⅰ
[Introduction au système] Retracement de Fibonacci ♬
Introduction à l'optimisation non linéaire (I)
Introduction à la communication série [Python]
AOJ Introduction à la programmation Sujet n ° 5, Sujet n ° 6
Introduction au Deep Learning ~ Règles d'apprentissage ~
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
Introduction à discord.py (3) Utilisation de la voix
Introduction à l'optimisation bayésienne
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Super introduction à l'apprentissage automatique
Introduction à Ansible Part «Inventaire»
Série: Introduction à cx_Oracle Contents
[Introduction] Comment utiliser open3d
Introduction à Python pour, pendant
Introduction au Deep Learning ~ Rétropropagation ~
Introduction à Ansible Part ④'Variable '
Introduction à la commande vi (Remarque)
[Présentation de l'application Udemy Python3 +] 58. Lambda