我尝试从以下网址获取城市的经纬度坐标: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) 的内容作为 JSON 文件中包含的 589 个城市的坐标。除了每个城市我都得到 (0,0) 之外,一切正常。我认为这是 javascript 的问题,但事实并非如此。事实上,当我将 JSON 文件减少到例如 6 个城市时,我会得到每个城市的正确坐标。我尝试使用DOWNLOAD_DELAY具有不同值(1,2 和 3)的设置,但仍然不起作用。我的 JSON 文件太重了吗?有人对这个问题有线索吗?
繁花如伊
红糖糍粑
随时随地看视频慕课网APP
相关分类