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