Selenium_自动化拾取高德坐标

没有试requests,直接上的Selenium。


#

有1000多个待查询地物名称,需要批量查询它们的经纬度。本来想找个在线平台批量查询的,但随便找了几个都是拾取百度地图的经纬度,笔者习惯高德地图,且不想把 BD09 转成 GCJ02 ,于是自己写了个使用 Selenium 的微型project来批量拾取这些地物的经纬度。

# 利用可视化界面打开Excel

在Python中利用可视化界面和用户进行交互是比 C# 困难一点的,但也不是完全不能实现。在此处可以利用 tkinter 进行文件选择,并将选择的Excel通过 pandas 读取。

from tkinter import filedialog

selected_file = filedialog.askopenfile()
if selected_file:
    # 我把sheetname固定了,图个方便。
    excel_df = pandas.read_excel(selected_file.name, sheet_name='Sheet1')

# Web自动化

结合 pandas 的函数,基于 Selenium 进行Web自动化操作,以批量拾取众多地物的经纬度信息。有关Web自动化的具体操作详见此处

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

coord_list = []
# Selenium自动化
chrome_driver_path = 'chromedriver.exe'
chrome_service = Service(executable_path=chrome_driver_path)
chrome_browser = webdriver.Chrome(service=chrome_service)
chrome_browser.get('https://lbs.amap.com/tools/picker')

# 元素定位
input_blank = chrome_browser.find_element(by=By.XPATH, value='//input[@id="txtSearch"]')
search_button = chrome_browser.find_element(by=By.XPATH, value='//a[@title="搜索"]')
copy_blank = chrome_browser.find_element(by=By.XPATH, value='//input[@id="txtCoordinate"]')
for item in excel_df.itertuples():
    input_blank.clear()
    input_blank.send_keys(str(item[0]))
    search_button.click()
    print(copy_blank.get_attribute('value'))
    coord_list.append(copy_blank.get_attribute('value'))

由于是操作的浏览器进行数据请求,需要给予系统一定渲染的时间,在合适的位置添加等待函数。

# 输出Excel

由于该微型project仅用来批量拾取经纬度,因此输出也显得很简单。使用 pandas 的输出Excel方法便可。

...
import pandas

coord_list = []
...
...
...
output_excel_df = pandas.DataFrame({
    'coord_xy': coord_list
})
output_excel_df.to_excel('Data/output_xy.xlsx', index=None)

Leave a Reply

Your email address will not be published.