我有兴趣检索对应于地图上和我列出的链接上的可下载文件中列出的点的纬度和经度数据。我正在寻找这些数据,以便找到位于同一地点的EPA网站。
目前,网站上没有公开的纬度和经度数据,但是当您下载文件时,它们的标题最终类似于以下示例:
_DW0435 B (18.082454357146347 -67.03902682209014) Primary 3_04_19 3_05_19
括号内的数字是lat和lon坐标,所以我知道必须有一种方法可以在大批量中检索这些数据。
以下是所有紫色空气设备的地图:
以下是所有可下载数据的传感器列表:
https://www.purpleair.com/sensorlist
如果可能的话,我的目标是只为每个可用的数据文件提取纬度和经度,并将它们存储在csv文件中的相应列中...有点像:
CSV_FILE
18.38 -67.93
45.2 -32
等等...
我想这将需要python / MATLAB与HTML的一些关系来成功下载对应于点的批量经度和经度坐标,但我的限制因素是我没有任何HTML经验。任何帮助,将不胜感激!
泰勒,谢谢你
这应该这样做:
import requests
from lxml import html
import re
if __name__ == "__main__":
response = requests.get('https://www.purpleair.com/sensorlist')
xpath = '//td//button[1]/@onclick'
for cnt in range(10):
tree = html.fromstring(response.content[len(response.content)//10*cnt:len(response.content)//10*(cnt+1)])
onclick_info_from_buttons = tree.xpath(xpath)
position_re = re.compile(r'(\(-?\d+.\d+ -?\d+.\d+\))')
results = [position_re.findall(tmp) for tmp in onclick_info_from_buttons]
results = results[::2]
results = [x[0] for x in results if x]
with open('positions.csv', 'a') as f:
i = 0
for result in results:
f.write(f"{result[1:-1]}\n")
print(i/len(results)*10*(cnt+1), '%')
i += 1
这个解决方案可能不是很好,但它的工作。
请注意,我在这里描述的f-strings(f"{result[1:-1]}\n"
)使用了Python 3.6:https://docs.python.org/3/reference/lexical_analysis.html#f-strings
编辑:我忘了提到我将数据分成10个部分,以便我们可以看到有多少数据已经保存到生成的文件中。整个数据集非常大,似乎脚本停止工作。
您还必须安装lxml库(pip3 install lxml
)。