如何使用Selenium Python爬取动态表格中的复杂元素和交互操作

简介: Selenium是一个自动化测试工具,可以模拟浏览器的行为,如打开网页,点击链接,输入文本等。Selenium也可以用于爬取网页中的数据,特别是那些动态生成的数据,如表格,图表,下拉菜单等。本文将介绍如何使用Selenium Python爬取动态表格中的复杂元素和交互操作。

亿牛云代理.jpeg

正文

Selenium是一个自动化测试工具,可以模拟浏览器的行为,如打开网页,点击链接,输入文本等。Selenium也可以用于爬取网页中的数据,特别是那些动态生成的数据,如表格,图表,下拉菜单等。本文将介绍如何使用Selenium Python爬取动态表格中的复杂元素和交互操作。

特点

  • Selenium可以处理JavaScript生成的动态内容,而传统的爬虫工具如requests或BeautifulSoup无法做到。
  • Selenium可以模拟用户的交互操作,如点击按钮,选择选项,滚动页面等,从而获取更多的数据。
  • Selenium可以通过定位元素的方法,如id,class,xpath等,来精确地获取表格中的数据。
  • Selenium可以结合pandas库,将爬取的数据转换为DataFrame格式,方便后续的分析和处理。

案例

以近期汇率数据为例,我们将从以下网址爬取数据:
https: //www.investing.com/economic-calendar/investing.com-eur-usd-index-1155
该网页中有一个动态表格,展示了欧元/美元指数的历史数据。我们需要爬取该表格中的所有数据,并保存为DataFrame格式。

代码

# 导入所需的库
import time
from selenium import webdriver
import pandas as pd

#亿牛云 爬虫代理加强版 设置代理服务器信息
proxyHost = "www.16yun.cn"
proxyPort = "3111"
proxyUser = "16YUN"
proxyPass = "16IP"

# 配置Chrome浏览器以使用代理服务器
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f'--proxy-server=http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}')
driver = webdriver.Chrome(options=chrome_options)

# 打开目标网页


# 等待页面加载完成
time.sleep(10)

# 点击“显示更多”按钮,直到所有数据都显示出来
while True:
    try:
        # 定位“显示更多”按钮
        show_more = driver.find_element_by_xpath('//*[@id="showMoreHistory"]/a')
        # 点击按钮
        show_more.click()
        # 等待一秒
        time.sleep(1)
    except:
        # 如果没有找到按钮或者出现异常,则跳出循环
        break

# 定位表格元素
table = driver.find_element_by_id('eventHistoryTable')

# 获取表格中的所有行
rows = table.find_elements_by_tag_name('tr')

# 创建一个空列表,用于存储数据
data = []

# 遍历每一行
for row in rows:
    # 获取行中的所有单元格
    cells = row.find_elements_by_tag_name('td')
    # 如果单元格数量大于0,则说明是数据行,而不是标题行或空行
    if len(cells) > 0:
        # 创建一个空字典,用于存储一行数据
        record = {
   }
        # 将每个单元格的文本和对应的列名作为键值对存入字典
        record['Date'] = cells[0].text
        record['Actual'] = cells[1].text
        record['Forecast'] = cells[2].text
        record['Previous'] = cells[3].text
        # 将字典追加到列表中
        data.append(record)

# 关闭浏览器对象
driver.close()

# 将列表转换为DataFrame对象
df = pd.DataFrame(data)

# 打印DataFrame对象
print(df)

功能说明如下:

  1. 导入所需的库:代码使用import语句导入了time、webdriver(Selenium库的一部分,用于操作浏览器)和pandas库。
  2. 设置爬虫代理以提高采集成功率,创建一个Chrome浏览器对象:通过webdriver.Chrome()创建了一个Chrome浏览器对象,用于操作和访问网页。
  3. 打开目标网页:使用driver.get()方法打开了指定网页
  4. 等待页面加载完成:通过time.sleep(10)在页面加载后等待10秒,确保页面加载完全。
  5. 点击“显示更多”按钮,直到所有数据都显示出来:通过一个while循环来不断点击“显示更多”按钮,直到页面显示了所有数据。这个循环会在每次点击按钮后等待1秒钟,用于等待数据加载。
  6. 定位表格元素:使用driver.find_element_by_id()方法找到表格元素,其id为'eventHistoryTable'。
  7. 获取表格中的所有行:使用find_elements_by_tag_name('tr')方法找到表格中的所有行。
  8. 创建一个空列表,用于存储数据:代码创建了一个名为data的空列表,用于存储爬取到的数据。
  9. 遍历每一行:通过for循环遍历每一行。
  10. 判断行类型:对于每一行,通过find_elements_by_tag_name('td')方法找到行中的所有单元格,然后判断单元格数量是否大于0,以确定该行是否是数据行,而不是标题行或空行。
  11. 解析数据并存储:如果是数据行,代码创建一个空字典record,并将每个单元格的文本和对应的列名作为键值对存入字典。然后,将这个字典追加到data列表中,形成一个二维数据结构,其中每个元素都是一个字典代表一行数据。
  12. 关闭浏览器对象:在数据爬取完成后,通过driver.close()关闭浏览器对象,释放资源。
  13. 将列表转换为DataFrame对象:使用pd.DataFrame(data)将data列表转换为一个pandas的DataFrame对象df,其中每个字典代表DataFrame的一行。
  14. 打印DataFrame对象:通过print(df)将DataFrame对象打印出来,展示网页中爬取到的数据。

该代码通过Selenium库模拟浏览器操作,使用爬虫代理访问指定网页,然后通过定位网页元素、解析数据,并最终将数据转换为DataFrame对象。通过DataFrame对象,可以方便地对网页上的数据进行进一步处理和分析。

结语

通过本文的介绍,我们了解了如何使用Selenium Python爬取动态表格中的复杂元素和交互操作。Selenium是一个强大的爬虫工具,可以应对各种复杂的网页结构和数据类型。希望本文能够对你有所帮助和启发。

相关文章
|
2月前
|
数据处理 索引 Python
用Python实现数据录入、追加、数据校验并生成表格
本示例展示了如何使用Python和Pandas库实现学生期末考试成绩的数据录入、追加和校验,并生成Excel表格。首先通过`pip install pandas openpyxl`安装所需库,然后定义列名、检查并读取现有数据、用户输入数据、数据校验及保存至Excel文件。程序支持成绩范围验证,确保数据准确性。
90 14
|
4月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
202 5
|
5月前
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
140 2
|
3月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
78 1
|
3月前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
155 6
|
4月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
4月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
86 1
|
4月前
|
Python
Python软链接:Python 2与现代Python的交互
Python软链接:Python 2与现代Python的交互
41 4
|
4月前
|
前端开发 API 开发者
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
57 3
|
4月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。

热门文章

最新文章