网站设计制作一般多少钱,wordpress 分享后下载,湖南网络工程职业技术学院,好看的网站页面发现了一个使用Selenium的find_element模块#xff0c;快速获取文字和表格的方法#xff0c;很实在#xff0c;以后爬网的时候#xff0c;就不用beautifulSoup 和 pandas的read_html 混起来用了#xff01; 文字部分#xff1a;实现网络节点下#xff0c;某个节点下的其…发现了一个使用Selenium的find_element模块快速获取文字和表格的方法很实在以后爬网的时候就不用beautifulSoup 和 pandas的read_html 混起来用了 文字部分实现网络节点下某个节点下的其他子孙节点的文字的拼接 表格部分实现获取表格并转为列表格式 话不多说码上
1. 获取文字的部分
如果是简单的文字直接用text就完成了
xpath_name//div[classexample]
driver.find_element(By.XPATH,xpath_name).text但是有时候有些文字就会分成很多个节点要把这些文字拼起来就很麻烦例如 有时候在网络节点里一会是span 标签一会是a标签一会是p标签。
就算是用beautifulSoup 来解也很难搞得齐全用find_element的xpath 来定位也很难搞也是要考虑层级结构的问题的。
这里可以用上 find_element 遍历后代节点的方法
在上面的例子中我只需要找到idcontent 的第一层节点然后找到该节点下的所有子节点和子孙节点下的text这样就可以把他们拼凑起来了
1.1 获取所有子孙节点的写法
如果你想要从特定的父元素开始获取所有子节点你可以结合使用标签选择器和.//。
children_elements parent_element.find_elements(By.XPATH, .//p)在这个例子中.//p是一个XPath表达式它意味着“选择当前节点下所有的p标签包括所有层级的后代节点”。
1.2 如果只是获取子节点的话则是
children_elements parent_element.find_elements(By.XPATH, ./*)其中XPath中的.代表当前节点/child::* 代表选择当前节点的所有直接子节点。
完整写法
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_elementdriver.find_element(By.ID ,content)
#获取所有
children_elements parent_element.find_elements(By.XPATH, .//p)
new_content# 遍历所有找到的p标签的后代节点并打印它们的标签名和文本
for child in children_elements:#print(fTag: {child.tag_name}, Text: {child.text})new_contentnew_contentchild.textprint(最后实现的文字,new_content) 2. 获取表格的部分
获取表格的逻辑是 1.使用find_element方法定位到表格元素。 2. 使用get_attribute(outerHTML)打印表格内容可选 这个方法打印的是含有表格的源码而非表格的内容 3. for循环遍历表格行和单元格打印出每一行的单元格文本以列表的形式显示。 完整逻辑
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()