【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)

发现了一个使用Selenium的find_element模块,快速获取文字和表格的方法,很实在,以后爬网的时候,就不用beautifulSoup 和 pandas的read_html 混起来用了!

文字部分 :实现网络节点下,某个节点下的其他子孙节点的文字的拼接
表格部分:实现获取表格,并转为列表格式

话不多说,码上:

1. 获取文字的部分

如果是简单的文字,直接用text就完成了:

python 复制代码
xpath_name='//div[@class="example"]'
driver.find_element(By.XPATH,xpath_name).text

但是有时候,有些文字就会分成很多个节点,要把这些文字拼起来就很麻烦,例如:

有时候在网络节点里,一会是span 标签,一会是a标签,一会是p标签。

就算是用beautifulSoup 来解也很难搞得齐全,用find_element的xpath 来定位也很难搞,也是要考虑层级结构的问题的。

这里可以用上 find_element + 遍历后代节点的方法:

在上面的例子中,我只需要找到id=content 的第一层节点,然后找到该节点下的所有子节点和子孙节点下的text,这样就可以把他们拼凑起来了:

1.1 获取所有子孙节点的写法:

如果你想要从特定的父元素开始获取所有子节点,你可以结合使用标签选择器和.//

python 复制代码
children_elements = parent_element.find_elements(By.XPATH, './/p')

在这个例子中,'.//p'是一个XPath表达式,它意味着"选择当前节点下所有的<p>标签,包括所有层级的后代节点"。

1.2 如果只是获取子节点的话,则是:

python 复制代码
children_elements = parent_element.find_elements(By.XPATH, './*')

其中,XPath中的'.'代表当前节点,'/child::* '代表选择当前节点的所有直接子节点。

完整写法:

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建WebDriver实例,这里以Chrome为例
driver = webdriver.Chrome()

# 打开目标网页
driver.get("你的目标网页URL")

sleep(random.uniform(2, 3))

#获取文字部分
#获取第一层节点,父亲节点
parent_element=driver.find_element(By.ID ,'content')
#获取所有
children_elements = parent_element.find_elements(By.XPATH, './/p')
new_content=''

# 遍历所有找到的<p>标签的后代节点,并打印它们的标签名和文本
for child in children_elements:
    #print(f"Tag: {child.tag_name}, Text: {child.text}")
    new_content=new_content+child.text

print('最后实现的文字:',new_content)

        

2. 获取表格的部分

获取表格的逻辑是:

1.使用find_element方法定位到表格元素。

  1. 使用get_attribute('outerHTML')打印表格内容(可选) 这个方法打印的是含有表格的源码,而非表格的内容

  2. for循环遍历表格行和单元格,打印出每一行的单元格文本,以列表的形式显示。

完整逻辑:

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建WebDriver实例
driver = webdriver.Chrome()

# 打开目标网页
driver.get("http://example.com/some_page_with_tables.html")

# 定位表格元素
table = driver.find_element(By.TAG_NAME, 'table')

# 方法1:打印整个表格的HTML
print(table.get_attribute('outerHTML'))

# 方法2:遍历并打印表格的每一行和单元格内容
rows = table.find_elements(By.TAG_NAME, 'tr')
for row in rows:
    cells = row.find_elements(By.TAG_NAME, 'td')
    cell_texts = [cell.text for cell in cells]
    print(cell_texts)

# 关闭浏览器
driver.quit()
相关推荐
兵慌码乱3 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵5 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio8 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户03321266636710 小时前
使用 Python 从零创建 Word 文档
python
Csvn14 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽15 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户5569188175317 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱1 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python