【发布时间】:2022-11-14 04:04:26
【问题描述】:
我对 python 是半新手,但过去在网络抓取方面取得了一些成功。这个想法绝对超出了我目前的技能。 有一个交互式地图on this website 我想从中刮取数据。我想要的信息是名为 San Antonio (5401) 的社区的地块级数据(称为“PREDIOS”)。我已经有一个用于所需属性的 shapefile,但该 shapefile 未连接到任何地籍信息,如属性编号、价值、材料等。问题是我无法弄清楚如何查询 WMS 代理服务以获取 getInfoPredio 或 getFeatureInfoRequest (在 mapascontroller.js 元素中找到此相关信息)。我想要的只是带有 X-Y 坐标的属性编号。 PREDIO 编号是“代表区块编号的 3:4 数字”-“代表属性编号的 1:3 数字”(例如 XXX-X、XXX-XX 或 XXXX-XXX)。后者可能有 50 个例外,其中财产编号为 5 位数。我很乐意将多边形的质心与属性编号连接起来。问题是我不确定从 JSON 中获取信息有多么容易,而无需在各种坐标中以某种方式“单击”以获取包含坐标的传单弹出响应。 我考虑了几个选项,包括:
- 通过与各种属性的质心相对应的一轮 X、Y 坐标以某种方式查询站点是否有意义?
- 有谁能比我更擅长 python 看看我是不是完全找错了树?
- 我编写了一些代码,似乎使用 url='https://www4.sii.cl/mapasui/services/data/mapasFacadeService/getFeatureInfo' 以结束 3 个错误之一:
- JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
- TypeError:get() 获得了参数“params”的多个值
- ConnectionError: HTTPConnectionPool(host='cl.sii.sdi.lob.bbrr.mapas.data.api.interfaces.mapasfacadeservice', port=80): 最大重试次数超出了 url: /getFeatureInfo?comuna=5401&eacs=14&eacano =2022(由 NewConnectionError 引起('<urllib3.connection.HTTPConnection object at 0x00000172DE45F7F0>: 无法建立新连接:[Errno 11001] getaddrinfo failed'))
我只是觉得我错过了一些东西。下面的代码:
url='http://cl.sii.sdi.lob.bbrr.mapas.data.api.interfaces.MapasFacadeService/getFeatureInfo' def get_data_sii(): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'} params = (('comuna','5401'), ('eacs', '14'), ('eacano', '2022'), ) response = requests.get(url, headers=headers, params=params) return response.json() sii_data = get_data_sii() jsondata = sii_data['id'] data_file = open('jsonoutput.csv', 'w', newline='') csv_writer = csv.writer(data_file) count = 0 for data in jsondata: if count == 0: header = data['predioPublicado'].keys() csv_writer.writerow(header) count += 1 csv_writer.writerow(data['predioPublicado'].values()) os.startfile("jsonoutput.csv")
【问题讨论】:
-
请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。
标签: python web-scraping leaflet