摘要:最近一个项目有需求如下:确定一批地址的具体信息(精确到省市区),有些地址是很模糊的,需要百度搜索。于是想到利用selenium操纵百度地图,通过自动输入地址和获取搜索结果加上一定的字符串处理就可以批量完成这个任务。需要注意的是百度地图搜索到的结果页面url会发生变化,所以要跳转到新的url页面中。
近期的项目需求是精准定位至城市或省份的特定位置。鉴于部分地址不够明晰需借助百度搜索引擎验证与核实,我们选择运用Selenium技术操控百度地图,实现在线地址填写、检索结果提取以及相关文本处理等功能,以期有效提升工作效率。
思路分析与代码讲解
针对此问题,我们首先深度剖析策略方案。采用Selenium自动化技术对百度地图进行精准操控,实现线上地址输入、快速搜寻以及结果获取等实用功能。以下为具体的详细规划及编码执行阶段:
python #代码示例 importtime 采用Selenium技术驱动WebDriver 利用WebDriver中的keys类,执行上述步骤。 #设置浏览器驱动路径 驱动路径设定为:/路径/至/CHROME浏览器/驱动器。 #打开浏览器 本驱动以谷歌Chrome的核心技术为基础,通过启动路径实现初始化和配置。 #打开百度地图网址 该指引将引导您前往"https://map.baidu.com/"。 #待查询地址列表 本列表囊括诸多独特地址,包括“地址1”、“地址2”及“地址3”等。 #循环处理每个地址 foraddressinaddress_list: try: #清空输入框内的地址 使用以下代码定位该搜寻栏:driver.find_element_by_css_selector('#sole-input'). 输入框中执行Ctrl+A快捷操作 使用“删除”快捷键输入至input_box。 #输入地址 input_box.send_keys(address)输入框送回【Enter】按键操作。 time.sleep(2)#等待页面加载 #获取搜索结果 通过运用`driver.find_element_by_class_name("n-blue")`的方法批量查询百度收录,成功地提取出了具有"n-blue"类别的元素。 print(result.text) exceptExceptionase: print(f"未找到地址:{address}") #关闭浏览器 driver.quit()# coding: utf-8 # 作者(@Author): Messimeimei # 创建时间(@Created_time): 2024/1/15 16:01 """""" def getAddress(locations: list) -> list: """ 输入待查询的地址列表,以列表形式返回每个地址在百度地图查询到的第一个地址 :param locations:地址列表 :return:列表形式的地址 """ import time from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By searched_arr = [] # 保存搜索到的内容 options = webdriver.ChromeOptions() options.add_argument("-headless") # 不显示浏览器 driver = webdriver.Chrome() # 添加options就不显示,这里没添加 driver.get("https://map.baidu.com/@12713770.095,3547943.7200000007,19z") print(locations) for i in range(len(locations)): time.sleep(3) driver.find_element(By.ID, "sole-input").send_keys(Keys.CONTROL, "a") # 全选输入框 driver.find_element(By.ID, "sole-input").send_keys(Keys.BACKSPACE) # 删除全选的输入框内容,即上次输入的地址 driver.find_element(By.ID, "sole-input").send_keys(locations[i]) # 输入新的地址 driver.find_element(By.XPATH, '//*[@id="search-button"]').click() # 点击搜索 time.sleep(5) # 等待加载结果 # driver.switch_to.window(driver.current_window_handle) # 切换到最新的句柄 print(driver.current_url) # 查看当前url driver.get(driver.current_url) # 跳转到当前的搜索结果页面 time.sleep(2) # 能搜索到的地区用简化替代或者不简化 try: place = driver.find_element(By.CLASS_NAME, 'poilist').find_element(By.TAG_NAME, 'li').find_element(By.XPATH, '//*[@id="card-1"]/div/div[1]/ul/li/div[1]/div[3]/div[2]').text print(place) # 搜索不到的地区则名称不变 except Exception: place = locations[i] print(place) searched_arr.append(place) # 保存百度地图搜索到的内容 driver.quit() return searched_arr print(getAddress(["武汉大学","北京大学"]))
以上是我们的代码实现,下面我们将对其中的思路进行详细讲解。
运用Selenium自动化框架和兼容Chrome的浏览器支持,便捷地操作连接至百度地图官网。编制地址列表,准确记录待查询的具体地址信息。程序通过循环方式,依次处理每个地址项。
在处理单一地址时,首要环节便是清空原有输入信息,继而输入新址进行检索。考虑到百度地图网页检索结果的URL变动可能性较大,必须待页面完全载入后方可捕获精确搜索结果。最终,通过定位特定元素,即可提取搜索结果中的关键文本信息。
如无满意答案证明此处信息暂未收录于百度地图库,故产生上述提示。
在采取此措施后,大型地址信息的自动化处理效率得到大幅提升。
优化方案
提升工作效率与系统稳健性的实践过程中,有多种优化策略可供采纳,如采用多线程或分布式计算技术,实现大规模数据的并行处理,从而大幅缩短计算周期。此外,针对网络连接中断、页面加载超时等突发状况,需设计相应的应对措施(如容错机制),确保应用程序稳定可靠地运行。
安全考虑
在网络运作过程中,自动化技术面临着严峻的安全考验。为了防止程序运作对网站造成过大负担或对普通用户使用造成困扰,必须严格遵循用户协议中所有的条款和限制,从而有效抵御可能出现的各种恶意攻击和不当利用行为。
法律风险
在利用自动化技术进行网络工作时应警惕潜在法律风险。部分网站设置反爬虫系统防范自动访问,为此开展自动化任务前务须熟悉各网站规定以保证行为符合法律法规。
数据隐私保护
用户数据的隐私保护应予高度重视批量查询百度收录,务必遵守相关法律法规,采取全面且严密的安保策略,以防止数据泄露及滥用。
总体而言,Selenium技术为百度地图提供了精确而便捷的操作路径,有助于大规模地址数据的有效采集,但同时需关注安全性、法律风险以及私人隐私等方面,确保行为合法合规及高度可靠。