使用Python自动化高德地图/百度地图导航并提取公里数

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:Java Fans的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:使用Python自动化高德地图/百度地图导航并提取公里数

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

文章目录

    • 前言
      • [1. 准备工作](#1. 准备工作)
        • [1.1 安装Python](#1.1 安装Python)
        • [1.2 安装所需的Python库](#1.2 安装所需的Python库)
        • [1.3 下载并配置WebDriver](#1.3 下载并配置WebDriver)
        • [1.4 安装Tesseract OCR](#1.4 安装Tesseract OCR)
        • [1.5 准备Excel文件](#1.5 准备Excel文件)
        • [1.6 确保网络连接](#1.6 确保网络连接)
        • [1.7 了解基本的Python编程](#1.7 了解基本的Python编程)
      • [2. 代码实现](#2. 代码实现)
      • [3. 代码解析](#3. 代码解析)
        • [3.1 导入所需库](#3.1 导入所需库)
        • [3.2 设置浏览器选项](#3.2 设置浏览器选项)
        • [3.3 启动Chrome浏览器](#3.3 启动Chrome浏览器)
        • [3.4 读取Excel文件](#3.4 读取Excel文件)
        • [3.5 创建保存截图的文件夹](#3.5 创建保存截图的文件夹)
        • [3.6 循环处理每一行数据](#3.6 循环处理每一行数据)
        • [3.7 打开地图并输入目的地](#3.7 打开地图并输入目的地)
        • [3.8 选择第一个搜索项](#3.8 选择第一个搜索项)
        • [3.9 输入出发地并选择驾车导航](#3.9 输入出发地并选择驾车导航)
        • [3.10 截图并保存](#3.10 截图并保存)
        • [3.11 识别图片中的公里数](#3.11 识别图片中的公里数)
        • [3.12 保存更新后的Excel文件](#3.12 保存更新后的Excel文件)
        • [3.13 关闭浏览器](#3.13 关闭浏览器)
      • [4. 结论](#4. 结论)
        • [4.1 自动化技术的优势](#4.1 自动化技术的优势)
        • [4.2 Python的强大生态系统](#4.2 Python的强大生态系统)
        • [4.3 实际应用场景](#4.3 实际应用场景)
        • [4.4 未来的扩展与改进](#4.4 未来的扩展与改进)
        • [4.5 学习与成长](#4.5 学习与成长)

前言

在当今信息化快速发展的时代,自动化技术已经渗透到我们生活的方方面面。尤其是在交通导航领域,如何高效地规划路线、获取实时信息,成为了人们日常出行的重要需求。传统的手动输入出发地和目的地的方式不仅耗时,而且容易出错。因此,借助自动化工具来简化这一过程,显得尤为重要。

本博文旨在介绍如何利用Python编程语言,结合Selenium、Pandas、Pillow和Tesseract等强大库,实现一个自动化脚本。该脚本能够从Excel文件中读取出发地和目的地,自动打开高德地图或百度地图,进行驾车导航,并截图保存导航信息及公里数。通过这一过程,我们不仅可以提高工作效率,还能减少人为错误,确保信息的准确性。

在实现过程中,我们将详细阐述每一步的操作,包括如何设置浏览器、如何与网页元素交互、如何进行图像处理和文字识别等。这些技术不仅适用于交通导航,还可以扩展到其他需要自动化操作的场景,如数据采集、信息提取等。

无论您是编程新手还是有经验的开发者,这篇博文都将为您提供实用的代码示例和详细的操作步骤,帮助您掌握自动化技术的基本应用。让我们一起探索如何通过Python实现高效的导航自动化,提升我们的工作和生活质量。

1. 准备工作

在开始编写自动化脚本之前,我们需要进行一些准备工作,以确保我们的环境和工具能够顺利运行。以下是详细的准备步骤:

1.1 安装Python

首先,确保您的计算机上安装了Python。您可以从Python官方网站下载并安装最新版本的Python。安装完成后,您可以在命令行中输入以下命令来验证安装是否成功:

bash 复制代码
python --version

如果显示了Python的版本号,说明安装成功。

1.2 安装所需的Python库

为了实现自动化脚本,我们需要安装一些Python库。打开命令行(Windows用户可以使用CMD或PowerShell,macOS和Linux用户可以使用终端),并运行以下命令:

bash 复制代码
pip install pandas selenium Pillow pytesseract
  • Pandas:用于处理Excel文件,方便读取和写入数据。
  • Selenium:用于自动化浏览器操作,模拟用户在网页上的行为。
  • Pillow:用于图像处理,方便对截图进行后续处理。
  • Pytesseract:用于图像文字识别,将截图中的文字提取出来。
1.3 下载并配置WebDriver

Selenium需要一个WebDriver来与浏览器进行交互。根据您使用的浏览器,下载相应的WebDriver:

下载后,将WebDriver的可执行文件放在一个易于访问的目录中,并记下其路径。您将在代码中使用这个路径。

1.4 安装Tesseract OCR

为了能够识别截图中的文字,您需要安装Tesseract OCR。可以从Tesseract GitHub页面下载适合您操作系统的版本。

安装完成后,您需要将Tesseract的安装路径添加到系统环境变量中,以便Pytesseract能够找到它。以下是添加环境变量的步骤:

  • Windows

    1. 右键点击"此电脑"或"计算机",选择"属性"。
    2. 点击"高级系统设置"。
    3. 在"系统属性"窗口中,点击"环境变量"。
    4. 在"系统变量"部分,找到并选择"Path",然后点击"编辑"。
    5. 点击"新建",添加Tesseract的安装路径(例如:C:\Program Files\Tesseract-OCR)。
    6. 点击"确定"保存更改。
  • macOS/Linux

    在终端中打开~/.bash_profile~/.bashrc文件,添加以下行:

    bash 复制代码
    export PATH=$PATH:/usr/local/bin/tesseract

    保存文件后,运行以下命令使更改生效:

    bash 复制代码
    source ~/.bash_profile
1.5 准备Excel文件

创建一个Excel文件(例如:data.xlsx),并在其中准备以下列:

  • A列:名称(用于保存截图时的文件名)。
  • B列:出发地(用户输入的出发地点)。
  • C列:目的地(用户输入的目的地点)。
  • D列:公里数(用于保存识别到的公里数)。

确保Excel文件的格式正确,并将其保存在一个易于访问的目录中。

1.6 确保网络连接

由于脚本需要访问高德地图或百度地图,因此请确保您的计算机连接到互联网,并且可以正常访问这些网站。

1.7 了解基本的Python编程

虽然本博文将提供完整的代码示例,但了解一些基本的Python编程知识将有助于您更好地理解代码的逻辑和结构。如果您是Python新手,可以参考一些在线教程或文档来学习基础知识。

2. 代码实现

以下是实现上述功能的Python代码示例:

python 复制代码
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
from PIL import Image
import pytesseract
import os

# 设置Chrome选项
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

# 启动Chrome浏览器
service = Service('path/to/chromedriver')  # 替换为chromedriver的路径
driver = webdriver.Chrome(service=service, options=chrome_options)

# 读取Excel文件
df = pd.read_excel('data.xlsx')  # 替换为你的Excel文件路径

# 创建保存截图的文件夹
if not os.path.exists('screenshots'):
    os.makedirs('screenshots')

for index, row in df.iterrows():
    name = row['A']  # A列名字
    departure = row['B']  # B列出发地
    destination = row['C']  # C列目的地

    # 打开高德地图或百度地图
    driver.get('https://map.baidu.com/')  # 或者使用高德地图的URL
    time.sleep(2)

    # 输入目的地
    search_box = driver.find_element(By.ID, 'sole-input')  # 根据实际情况修改
    search_box.clear()
    search_box.send_keys(destination)
    time.sleep(2)
    search_box.submit()
    time.sleep(2)

    # 选择第一个搜索项
    first_result = driver.find_element(By.XPATH, '//*[@id="result-list"]/li[1]')  # 根据实际情况修改
    first_result.click()
    time.sleep(2)

    # 输入出发地
    search_box = driver.find_element(By.ID, 'sole-input')  # 根据实际情况修改
    search_box.clear()
    search_box.send_keys(departure)
    time.sleep(2)
    search_box.submit()
    time.sleep(2)

    # 选择驾车导航
    drive_button = driver.find_element(By.XPATH, '//*[@id="drive-button"]')  # 根据实际情况修改
    drive_button.click()
    time.sleep(5)

    # 截图并保存
    screenshot_path = f'screenshots/{name}.png'
    driver.save_screenshot(screenshot_path)

    # 识别图片中的公里数
    image = Image.open(screenshot_path)
    text = pytesseract.image_to_string(image)
    # 假设公里数以"公里"结尾,提取公里数
    kilometers = [word for word in text.split() if '公里' in word]
    if kilometers:
        df.at[index, 'D'] = kilometers[0]  # 将公里数填写到D列

# 保存更新后的Excel文件
df.to_excel('updated_data.xlsx', index=False)

# 关闭浏览器
driver.quit()

3. 代码解析

在这一部分,我们将详细解析自动化脚本的每个部分,帮助您理解代码的逻辑和实现细节。代码的主要功能是从Excel文件中读取出发地和目的地,使用Selenium自动化浏览器操作进行导航,截图并提取公里数,最后将结果保存回Excel文件中。

3.1 导入所需库
python 复制代码
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
from PIL import Image
import pytesseract
import os
  • pandas:用于读取和处理Excel文件。
  • selenium:用于自动化浏览器操作。
  • webdriver:Selenium的核心模块,用于控制浏览器。
  • By:用于定位网页元素。
  • Service:用于管理WebDriver服务。
  • Options:用于设置浏览器选项。
  • time:用于控制程序的延时。
  • Pillow:用于图像处理。
  • pytesseract:用于图像文字识别。
  • os:用于文件和目录操作。
3.2 设置浏览器选项
python 复制代码
chrome_options = Options()
chrome_options.add_argument("--headless")  # 无头模式
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
  • Options():创建一个Chrome选项对象。
  • add_argument("--headless"):启用无头模式,这样浏览器将在后台运行,不会显示图形界面,适合自动化任务。
  • add_argument("--no-sandbox")add_argument("--disable-dev-shm-usage"):这些选项用于提高在某些环境(如Docker)中的稳定性。
3.3 启动Chrome浏览器
python 复制代码
service = Service('path/to/chromedriver')  # 替换为chromedriver的路径
driver = webdriver.Chrome(service=service, options=chrome_options)
  • Service():创建一个WebDriver服务实例,指定ChromeDriver的路径。
  • webdriver.Chrome():启动Chrome浏览器,并应用之前设置的选项。
3.4 读取Excel文件
python 复制代码
df = pd.read_excel('data.xlsx')  # 替换为你的Excel文件路径
  • pd.read_excel() :使用Pandas读取指定路径的Excel文件,并将其存储在DataFrame对象df中。DataFrame是Pandas中用于存储表格数据的主要数据结构。
3.5 创建保存截图的文件夹
python 复制代码
if not os.path.exists('screenshots'):
    os.makedirs('screenshots')
  • os.path.exists() :检查名为screenshots的文件夹是否存在。
  • os.makedirs():如果文件夹不存在,则创建该文件夹,用于保存后续生成的截图。
3.6 循环处理每一行数据
python 复制代码
for index, row in df.iterrows():
    name = row['A']  # A列名字
    departure = row['B']  # B列出发地
    destination = row['C']  # C列目的地
  • df.iterrows():遍历DataFrame的每一行,返回行索引和行数据。
  • row['A']row['B']row['C']:提取当前行的A、B、C列数据,分别表示名称、出发地和目的地。
3.7 打开地图并输入目的地
python 复制代码
driver.get('https://map.baidu.com/')  # 或者使用高德地图的URL
time.sleep(2)

search_box = driver.find_element(By.ID, 'sole-input')  # 根据实际情况修改
search_box.clear()
search_box.send_keys(destination)
time.sleep(2)
search_box.submit()
time.sleep(2)
  • driver.get():打开指定的URL,这里是百度地图的主页。
  • time.sleep(2):暂停程序2秒,以确保页面加载完成。
  • driver.find_element(By.ID, 'sole-input'):根据元素的ID定位搜索框(需要根据实际网页结构进行调整)。
  • search_box.clear():清空搜索框中的内容。
  • search_box.send_keys(destination):输入目的地。
  • search_box.submit():提交搜索请求。
  • time.sleep(2):再次暂停,等待搜索结果加载。
3.8 选择第一个搜索项
python 复制代码
first_result = driver.find_element(By.XPATH, '//*[@id="result-list"]/li[1]')  # 根据实际情况修改
first_result.click()
time.sleep(2)
  • driver.find_element(By.XPATH, '//*[@id="result-list"]/li[1]'):使用XPath定位搜索结果列表中的第一个结果。
  • first_result.click():点击第一个搜索结果。
  • time.sleep(2):等待页面加载。
3.9 输入出发地并选择驾车导航
python 复制代码
search_box = driver.find_element(By.ID, 'sole-input')  # 根据实际情况修改
search_box.clear()
search_box.send_keys(departure)
time.sleep(2)
search_box.submit()
time.sleep(2)

drive_button = driver.find_element(By.XPATH, '//*[@id="drive-button"]')  # 根据实际情况修改
drive_button.click()
time.sleep(5)
  • 这部分代码与输入目的地的过程类似,首先输入出发地,然后选择驾车导航按钮。
3.10 截图并保存
python 复制代码
screenshot_path = f'screenshots/{name}.png'
driver.save_screenshot(screenshot_path)
  • screenshot_path:定义截图的保存路径和文件名,使用A列的名称作为文件名。
  • driver.save_screenshot():保存当前浏览器窗口的截图。
3.11 识别图片中的公里数
python 复制代码
image = Image.open(screenshot_path)
text = pytesseract.image_to_string(image)
kilometers = [word for word in text.split() if '公里' in word]
if kilometers:
    df.at[index, 'D'] = kilometers[0]  # 将公里数填写到D列
  • Image.open():使用Pillow打开截图文件。
  • pytesseract.image_to_string():将图像转换为字符串,提取其中的文字。
  • text.split():将提取的文字按空格分割成单词。
  • [word for word in text.split() if '公里' in word]:查找包含"公里"的单词。
  • df.at[index, 'D'] = kilometers[0]:如果找到公里数,将其写入DataFrame的D列。
3.12 保存更新后的Excel文件
python 复制代码
df.to_excel('updated_data.xlsx', index=False)
  • df.to_excel() :将更新后的DataFrame保存为新的Excel文件,index=False表示不保存行索引。
3.13 关闭浏览器
python 复制代码
driver.quit()
  • driver.quit():关闭浏览器并结束WebDriver会话,释放资源。

4. 结论

在这篇博文中,我们深入探讨了如何使用Python实现一个自动化脚本,以高效地进行交通导航并提取相关信息。通过结合多种强大的库,如Selenium、Pandas、Pillow和Pytesseract,我们成功地实现了从Excel文件中读取出发地和目的地,自动打开高德地图或百度地图进行导航,截图并提取公里数的完整流程。以下是我们在实现过程中所获得的一些关键结论和反思:

4.1 自动化技术的优势

自动化技术在提高工作效率、减少人为错误方面具有显著优势。通过编写脚本,我们能够快速处理大量数据,而不必手动输入每个出发地和目的地。这种方式不仅节省了时间,还提高了信息的准确性,尤其是在需要频繁进行导航的场景中。

4.2 Python的强大生态系统

Python作为一种高效且易于学习的编程语言,拥有丰富的库和框架,使得实现复杂的自动化任务变得更加简单。Selenium提供了强大的网页自动化功能,Pandas则使数据处理变得直观而高效,而Pytesseract则为图像文字识别提供了便利。这些库的结合,使得我们能够轻松实现复杂的功能。

4.3 实际应用场景

这种自动化脚本的应用场景非常广泛。除了交通导航外,类似的技术可以用于数据采集、信息提取、市场调研等领域。例如,企业可以利用此技术自动获取竞争对手的价格信息,或是定期更新产品的库存数据。这些应用不仅提高了工作效率,还为决策提供了实时的数据支持。

4.4 未来的扩展与改进

尽管我们已经实现了基本的功能,但仍有许多方面可以进一步扩展和改进。例如:

  • 错误处理:在实际应用中,网络延迟、页面结构变化等因素可能导致脚本运行失败。我们可以添加异常处理机制,以确保脚本在遇到错误时能够优雅地处理。
  • 多线程处理:对于大规模数据处理,可以考虑使用多线程或异步编程,以提高处理速度。
  • 用户界面:为脚本添加一个简单的用户界面,使得非技术用户也能够轻松使用该工具。
  • 数据可视化:将提取到的数据进行可视化展示,帮助用户更直观地理解信息。
4.5 学习与成长

通过本项目的实施,您不仅掌握了自动化脚本的编写,还深入理解了Python编程的基本概念和库的使用。这种实践经验将为您今后的编程学习和项目开发打下坚实的基础。无论您是初学者还是有经验的开发者,参与这样的项目都能提升您的技能,并激发您对自动化技术的兴趣。

相关推荐
CL_IN37 分钟前
高效集成:聚水潭奇门至金蝶云星空的数据流自动化
java·前端·自动化
恬淡虚无真气从之42 分钟前
django中entity.save(using=)的使用
数据库·python·django
lovelin+v175030409661 小时前
电商平台店铺运营:巧用 API 接口的策略之道
java·大数据·后端·python
AI原吾1 小时前
构建灵活、高效的HTTP/1.1应用:探索h11库
网络·python·网络协议·http·ai·h11
傻啦嘿哟1 小时前
Python中的HTTP高手:如何玩转requests模块
开发语言·python·http
Jason-河山2 小时前
Python 爬虫的寻宝大冒险:如何捕获 API 数据的宝藏
开发语言·爬虫·python
南宫理的日知录2 小时前
96、Python并发编程:三个核心概念及Python并发编程模型
开发语言·python·编程学习
程序员编程指南2 小时前
python类与对象
python
cocosgirl2 小时前
python中高频小脚本汇合
linux·python
世间万物皆对象2 小时前
Java 基础教学:方法与数组-数组
java·开发语言·python