【Python】使用Selenium的find_element模塊獲取網頁上的大段文字和表格的方法(建議收藏!)

發現了一個使用Selenium的find_element模塊,快速獲取文字和表格的方法,很實在,以后爬網的時候,就不用beautifulSoup 和 pandas的read_html 混起來用了!

文字部分:實現網絡節點下,某個節點下的其他子孫節點的文字的拼接
表格部分:實現獲取表格,并轉為列表格式

話不多說,碼上:

1. 獲取文字的部分

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

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 獲取所有子孫節點的寫法:

如果你想要從特定的父元素開始獲取所有子節點,你可以結合使用標簽選擇器和.//

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_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.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()

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62939.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62939.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62939.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

APP滲透測試記錄(一、Android應用基本構造)

Android應用基本構造 雷電模擬機進入 adb shell# 如果不是root權限 su一下 su 1.了解APK文件 安卓應用的擴展名為.apk(Android Application Package),它是一個包含多個文件和文件夾的數據存檔文件。 1.1 apk文件解壓后的目錄結構 AndroidManifest.xml:包含應用的大部分…

【AI知識】有監督學習之回歸任務(附線性回歸代碼及可視化)

1. 回歸的基本概念 在機器學習的有監督學習中&#xff0c;回歸&#xff08;Regression&#xff09;是一種常見的任務&#xff0c;它的目標是通過觀察數據來建立一個模型&#xff0c;用一個或多個自變量來預測因變量的值。 回歸分析通常用于&#xff1a; a.預測&#xff0c;基于…

fastadmin批量壓縮下載遠程視頻文件

后端代碼 // 批量下載并壓縮 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(記錄不存在);}$arr [];$tempFiles []; // 用來存儲臨時下載的視頻文…

邊緣計算+人工智能:讓設備更聰明的秘密

引言&#xff1a;日常生活中的“智能”設備 你是否發現&#xff0c;身邊的設備正變得越來越“聰明”&#xff1f; 早上醒來時&#xff0c;智能音箱已經根據你的日程播放舒緩音樂&#xff1b;走進廚房&#xff0c;智能冰箱提醒你今天的食材庫存&#xff1b;而在城市道路上&…

JVM 雙親委派模型以及垃圾回收機制

目錄 1. JVM 內存區域劃分 2. JVM 中類加載的過程 1) 類加載的基本流程 2) 雙親委派模型 3. JVM 中垃圾回收機制 1) 找到垃圾 a) 引用計數 b) 可達性分析 2) 釋放垃圾 1. JVM 內存區域劃分 一個運行起來的 Java 進程&#xff0c;其實就是一個 JVM 虛擬機。 而進程是…

ansible自動化運維(四)jinjia2模板

Jinjia2模板 前面說到playbook組成的時候&#xff0c;有介紹到template模塊&#xff0c;而template模塊對模板文件進行渲染時&#xff0c;使用的就是jinja2模板引擎&#xff0c;jinja2本身就是基于python的模板引擎&#xff0c;所以下面先來了解一下jinjia2模板的一些用法 基…

通過k-means對相似度較高的語句進行分類

本文介紹了如何使用K-Means算法對相似度較高的語句進行分類&#xff0c;并附上java案例代碼 import java.util.ArrayList; import java.util.List; import java.util.Random;public class KMeansTextClustering {public static void main(String[] args) {// 初始化語句數據集…

Oracle 19c rac 補丁升級,從19.7 to19.22-集群

1. 補丁包概述 數據庫環境 角色 數據庫 IP地址 數據庫版本 主機名 數據庫名稱 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 將以下補丁包上傳到/soft下 上傳到兩個節點的soft目錄下&#xff1a;p6880880_190000_Linux-x86-64.zip &#xff08;更新o…

Windows安裝Jira

下載 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理員身份安裝&#xff0c;否則彈出以下提醒 創建和配置MySQL數據庫&#xff1a;參照 Connecting Jira applicat…

uniapp - 微信小程序

一、background-image 大圖不顯示的問題 解決方法&#xff1a; 1、使用網絡地址&#xff1b;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

DETR: End-to-End Object Detection with Transformers論文學習

論文地址&#xff1a;https://arxiv.org/pdf/2005.12872 代碼地址&#xff1a;https://github.com/facebookresearch/detr 相關學習視頻&#xff1a;https://space.bilibili.com/94779326/lists?sid1531941 標題前言&#xff1a; DETR 是 Facebook 團隊于 2020 年提出的基于…

LeetCode 24反轉鏈表

單鏈表反轉&#xff1a;詳細解析與代碼實現 在數據結構的學習過程中&#xff0c;鏈表是一個非常重要且有趣的部分&#xff0c;而單鏈表的反轉操作更是常考的基礎知識點。今天就來和大家詳細講講如何實現單鏈表的反轉&#xff0c;并通過代碼示例來加深理解呀。 題目 給定單鏈…

Redis學習筆記之——學習計劃

Redis——Remote Dictionary Server&#xff0c;開源、基于內存、速度快、key-value... Redis做為一個高性能的鍵值存儲系統&#xff0c;廣泛應用于緩存、會話存儲、分布式鎖以及其他需要快速訪問的數據場景中。熟悉掌握redis&#xff0c;似乎已成為廣大碼農們必備的一項技能。…

網絡安全教學博客(二):常見網絡安全威脅剖析

在上一篇博客中&#xff0c;我們了解了網絡安全的基礎概念和重要性。今天&#xff0c;讓我們深入探討一下常見的網絡安全威脅&#xff0c;以便我們能夠更好地識別和防范它們。 惡意軟件&#xff08;Malware&#xff09; 病毒&#xff08;Virus&#xff09;&#xff1a;病毒是一…

Vue3狀態管理:Pinia架構設計分析

Vue3狀態管理:Pinia架構設計分析 介紹 在Vue.js開發中&#xff0c;狀態管理是一個非常重要的部分。隨著Vue3的發布&#xff0c;Pinia作為一種新的狀態管理架構也相繼問世。本文將對Pinia架構進行深入分析&#xff0c;幫助讀者了解其設計原理、特點以及在實際項目中的應用。 架構…

【IDEA】啟動報錯

今天啟動IDEA報錯 報錯信息&#xff1a; Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打開任務管理器&#xff0c;關掉進程ID5444的任務

socket編程UDP-實現停等機制(接收確認、超時重傳)

在下面博客中&#xff0c;我介紹了利用UDP模擬TCP連接、按數據包發送文件的過程&#xff0c;并附上完整源碼。 socket編程UDP-文件傳輸&模擬TCP建立連接脫離連接&#xff08;進階篇&#xff09;_udp socket發送-CSDN博客 下面博客實現的是滑動窗口機制&#xff1a; sock…

uniapp小程序的錨點定位(將頁面滾動到目標位置)

小程序中&#xff0c;a頁面跳轉到b頁面&#xff0c;跳轉后滾動定位到b頁面的特定位置。 1.uni.pageScrollTo傳遞一個scrollTop參數可以滾動到特定位置。2.可以通過 uni.createSelectorQuery()等獲取定位元素的位置信息。3.uni.getSystemInfoSync()獲取設備的導航欄和狀態欄高度…

php基礎:命名空間

1.PHP 命名空間可以解決以下兩類問題&#xff1a; 1.用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。 2.為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名&#xff08;或簡短&#xff09;的名稱&#xff0c;以提高源代碼的可讀…

分布式 CAP理論 總結

前言 相關系列 《分布式 & 目錄》《分布式 & CAP理論 & 總結》《分布式 & CAP理論 & 問題》 分布式 分布式的核心是將大型業務拆解成多個子業務以使之在不同的機器上執行。分布式是用于解決單個物理機容量&性能瓶頸問題而采用的優化手段&#xf…