如何讓爬蟲正確提取偽元素
導讀 | 我們來看一個網頁,大家想想使用 XPath 怎麼抓取。可以看到,在原始碼裡面沒有請抓取我!這段文字。難道這個網頁是非同步載入?我們現在來看一下網頁的請求。 |
我們來看一個網頁,大家想想使用 XPath 怎麼抓取。
可以看到,在原始碼裡面沒有請抓取我!這段文字。難道這個網頁是非同步載入?我們現在來看一下網頁的請求:
網頁也沒有發起任何的Ajax 請求。那麼,這段文字是從哪裡來的?
我們來看一下這個網頁對應的 HTML:
整個 HTML 裡面,甚至連 JavaScript 都沒有。那麼這段文字是哪裡來的呢?
有點經驗的同學,可能會想到看一下這個example.css檔案,其內容如下:
沒錯,文字確實在這裡面。其中::after,我們稱之為偽元素(Pseudo-element)[1]。
對於偽元素裡面的文字,應該如何提取呢?當然,你可以使用正規表示式來提取。不過我們今天不準備講這個。
XPath 沒有辦法提取偽元素,因為 XPath 只能提取 Dom 樹中的內容,但是偽元素是不屬於 Dom 樹的,因此無法提取。要提取偽元素,需要使用 CSS 選擇器。
由於網頁的 HTML 與 CSS 是分開的。如果我們使用 requests 或者 Scrapy,只能單獨拿到 HTML 和 CSS。單獨拿到 HTML 沒有任何作用,因為資料根本不在裡面。單獨拿到 CSS,雖然有資料,但如果不用正規表示式的話,裡面的資料拿不出來。所以 BeautifulSoup4的 CSS 選擇器也沒有什麼作用。所以我們需要把 CSS 和 HTML 放到一起來渲染,然後再使用JavaScript 的 CSS 選擇器找到需要提取的內容。
首先我們來看一下,為了提取這個偽元素的值,我們需要下面這段Js 程式碼:
window.getComputedStyle(document.querySelector('.fake_element'),':after').getPropertyValue('content')
其中,ducument.querySelector的第一個引數.fake_element就表示值為fake_element的 class 屬性。第二個引數就是偽元素:after。執行效果如下圖所示:
為了能夠執行這段 JavaScript,我們需要使用模擬瀏覽器,無論是 Selenium 還是 Puppeteer 都可以。這裡以 Selenium 為例。
在 Selenium 要執行 Js,需要使用driver.execute_script()方法,程式碼如下:
提取出來的內容最外層會包上一對雙引號,拿到以後移除外側的雙引號,就是我們在網頁上看到的內容了。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2741812/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python爬蟲教程-19-資料提取-正規表示式(re)Python爬蟲
- 開發函式計算的正確姿勢 —— 爬蟲函式爬蟲
- 對於反爬蟲偽裝瀏覽器進行爬蟲爬蟲瀏覽器
- python爬蟲學習(一):BeautifulSoup庫基礎及一般元素提取方法Python爬蟲
- Python【爬蟲實戰】提取資料Python爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- Golang爬蟲+正規表示式Golang爬蟲
- 【Python爬蟲】正則爬取趕集網Python爬蟲
- 偽類和偽元素
- (一) 爬蟲教程 |正規表示式爬蟲
- Python 爬蟲網頁內容提取工具xpath(二)Python爬蟲網頁
- Python 爬蟲網頁內容提取工具xpath(一)Python爬蟲網頁
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- CSS偽元素詳解以及偽元素與偽類的區別CSS
- 投稿005期|5分鐘學會正則,解決98%爬蟲需要做字串提取的工作爬蟲字串
- 怎麼利用Python網路爬蟲來提取資訊Python爬蟲
- 資料提取方法-多程式多執行緒爬蟲執行緒爬蟲
- 基於bs4+requests的python爬蟲偽裝Python爬蟲
- 爬蟲偽裝正常使用者的三種方法爬蟲
- python爬蟲 正規表示式詳解Python爬蟲
- Java 的正規表示式與爬蟲Java爬蟲
- 06-偽類和偽元素
- 爬蟲框架如何搭建爬蟲框架
- 如何正確部署 QUICUI
- 爬蟲的小技巧之–如何尋找爬蟲入口爬蟲
- 如何合理控制爬蟲爬取速度?爬蟲
- 惡意爬蟲?能讓惡意爬蟲遁於無形的小Tips爬蟲
- 如何讓Python爬蟲一天抓取100萬張網頁Python爬蟲網頁
- Python3 | 簡單爬蟲分析網頁元素Python爬蟲網頁
- Python爬蟲教程-25-資料提取-BeautifulSoup4(三)Python爬蟲
- Python爬蟲教程-24-資料提取-BeautifulSoup4(二)Python爬蟲
- Python爬蟲教程-23-資料提取-BeautifulSoup4(一)Python爬蟲
- Python爬蟲教程-18-頁面解析和資料提取Python爬蟲
- 爬蟲第一章 資料提取與清洗策略爬蟲
- keycloak~正確讓api介面支援跨域API跨域
- Python爬蟲— 1.4 正規表示式:re庫Python爬蟲
- 寫爬蟲,不會正則怎麼行?爬蟲
- 偽類與偽元素的區別