[PYTHON] Einführung in Scrapy (2)

Einführung in Scrapy (2)

Einführung

Einführung in Scrapy (1)

Im vorherigen Artikel habe ich als ersten Schritt in Scrapy eine einfache Spinne erstellt und den URL-Extraktionsprozess ausprobiert. Scrapy kann nicht nur Webseiten, sondern auch Web-API-Ergebnisse und die Verarbeitung von Bilddownloads erfassen. Erstellen wir dieses Mal eine Spinne, die die Web-API aufruft und das Ergebnis speichert.

Eine Spinne erstellen

Erstellen Sie eine Spinne, um Stationsinformationen basierend auf der Liste der Postleitzahlen zu erhalten. Verwenden Sie die von HeartRails bereitgestellte API (http://geoapi.heartrails.com/api.html), um die Postleitzahl abzurufen. Die Spinne sieht so aus:

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 der Postleitzahlen (ursprünglich von DB usw. bezogen)
    postal_list = [
        1080072,
        1050013,
        1350063,
        1020072,
        9012206,
    ]

    #Diese Methode wird aufgerufen, wenn Spider gestartet wird. Stellen Sie eine Anfrage zum Aufrufen der API.
    def start_requests(self):
        for postal in self.postal_list:
            url = self.end_point % postal
            yield Request(url, self.parse)

    #Eine Methode, die nach Abschluss des Downloads aufgerufen wird. Extrahieren Sie Informationen aus der Antwort und geben Sie sie im Wörterbuchformat zurück
    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'],
        }

Lauf

Verwenden Sie nach wie vor die mit Scrapy gelieferten Befehle zum Crawlen. Verwenden Sie die Option -o, um die Crawling-Ergebnisse in stationes.json zu drucken.

scrapy runspider get_station_spider.py -o stations.json

Ergebnis

[
  {
    "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"
  }
]

Am Ende

Mit Scrapy ist es sehr einfach, alles zu schreiben, vom Aufrufen einer Web-API bis zum Speichern der Ausführungsergebnisse. Entwickler müssen nur Klassen und Funktionen erstellen, die von der Framework-Seite aufgerufen werden, sodass Sie sich auf die wesentlicheren Teile konzentrieren können. Das nächste Mal werde ich den Prozess des Herunterladens von Bilddateien behandeln. freue mich auf!

Recommended Posts

Einführung in Scrapy (1)
Einführung in Scrapy (3)
Einführung in Scrapy (2)
Einführung in Scrapy (4)
Einführung in MQTT (Einführung)
Einführung in Tkinter 1: Einführung
Einführung in PyQt
[Linux] Einführung in Linux
Einführung in discord.py (2)
Einführung in Lightning Pytorch
Erste Schritte mit Web Scraping
Einführung in nichtparametrische Felder
Einführung in EV3 / MicroPython
Einführung in die Python-Sprache
Einführung in die TensorFlow-Bilderkennung
Einführung in OpenCV (Python) - (2)
Einführung in PyQt4 Teil 1
Einführung in die Abhängigkeitsinjektion
Einführung in Private Chainer
Einführung in das maschinelle Lernen
Einführung in den Wörterbuch-Suchalgorithmus
Einführung in die Monte-Carlo-Methode
[Lernmemorandum] Einführung in vim
Einführung in PyTorch (1) Automatische Differenzierung
opencv-python Einführung in die Bildverarbeitung
Einführung in Python Django (2) Win
Einführung in das Schreiben von Cython [Notizen]
Einführung in Private TensorFlow
Eine Einführung in das maschinelle Lernen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
Eine super Einführung in Linux
Einführung
AOJ Einführung in die Programmierung Thema Nr. 7, Thema Nr. 8
Einführung in die Anomalieerkennung 1 Grundlagen
Einführung in RDB mit sqlalchemy Ⅰ
[Einführung in Systre] Fibonacci Retracement ♬
Einführung in die nichtlineare Optimierung (I)
Einführung in die serielle Kommunikation [Python]
AOJ Einführung in die Programmierung Thema Nr. 5, Thema Nr. 6
Einführung in Deep Learning ~ Lernregeln ~
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Einführung in Python (Python-Version APG4b)
Eine Einführung in die Python-Programmierung
[Einführung in cx_Oracle] (8.) Version cx_Oracle 8.0
Einführung in discord.py (3) Verwenden von Stimme
Einführung in die Bayes'sche Optimierung
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Super Einführung in das maschinelle Lernen
Einführung in Ansible Teil In'Inventory '
Serie: Einführung in den Inhalt von cx_Oracle
[Einführung] Verwendung von open3d
Einführung in Python For, While
Einführung in Deep Learning ~ Backpropagation ~
Einführung in Ansible Teil ④'Variable '
Einführung in den Befehl vi (Hinweis)
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda