【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()
相关推荐
数据智能老司机5 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机6 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机6 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i7 小时前
drf初步梳理
python·django
每日AI新事件7 小时前
python的异步函数
python
这里有鱼汤8 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook17 小时前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室17 小时前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三19 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试