Я пытаюсь получить широту и долготу городов из этого URL: https://www.latlong.net/. Мой код:
# -*- coding: utf-8 -*-
import re
import json
import scrapy
class geo_spider(scrapy.Spider):
name = "geo"
allowed_domains = ["www.latlong.net"]
start_urls = ['https://www.latlong.net/']
custom_settings = {
'COOKIES_ENABLED': True,
'DOWNLOAD_DELAY' : 1,
}
LAT_LONG_REGEX = 'sm\((?P<lat>.+),(?P<long>.+),'
def start_requests(self):
FILE_PATH = 'C:/Users/coppe/tutorial/cities.json'
with open(FILE_PATH) as json_file:
cities_data = json.load(json_file)
for d in cities_data:
yield scrapy.Request(
url='https://www.latlong.net/',
callback=self.gen_csrftoken,
meta={'city': d['city']},
dont_filter=True,
)
def gen_csrftoken(self, response):
city = response.meta['city']
yield scrapy.FormRequest.from_response(
response,
formid='frmPlace',
formdata={'place': city},
callback=self.get_geo,
meta={'city': city}
)
def get_geo(self, response):
lat_long_search = re.search(self.LAT_LONG_REGEX, response.body.decode('utf-8'))
if lat_long_search:
yield {
'coord': (lat_long_search.group('lat'), lat_long_search.group('long')),
'city': response.meta['city']
}
else:
from scrapy.shell import inspect_response
inspect_response(response, self)
Я должен получить что-то вроде (50,5) в качестве координаты для589 городов, содержащихся в файле JSON.Все работает, кроме того, что я получаю (0,0) для каждого города.Я думал, что это проблема с JavaScript, но это не так.Действительно, когда я уменьшаю свой файл JSON, например, до 6 городов, я получаю правильную координату для каждого города.Я пытаюсь использовать настройку DOWNLOAD_DELAY
с разными значениями (1,2 и 3), но все равно она не работает.Является ли мой файл JSON слишком тяжелым?У кого-нибудь есть подсказка по этому вопросу?