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