偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一日一技:爬蟲如何正確從網(wǎng)頁(yè)中提取偽元素?

網(wǎng)絡(luò) 通信技術(shù)
我們來(lái)看一個(gè)網(wǎng)頁(yè),大家想想使用 XPath 怎么抓取。可以看到,在源代碼里面沒(méi)有請(qǐng)抓取我!這段文字。難道這個(gè)網(wǎng)頁(yè)是異步加載?我們現(xiàn)在來(lái)看一下網(wǎng)頁(yè)的請(qǐng)求。

我們來(lái)看一個(gè)網(wǎng)頁(yè),大家想想使用 XPath 怎么抓取。

 

可以看到,在源代碼里面沒(méi)有請(qǐng)抓取我!這段文字。難道這個(gè)網(wǎng)頁(yè)是異步加載?我們現(xiàn)在來(lái)看一下網(wǎng)頁(yè)的請(qǐng)求:

 

網(wǎng)頁(yè)也沒(méi)有發(fā)起任何的Ajax 請(qǐng)求。那么,這段文字是從哪里來(lái)的?

我們來(lái)看一下這個(gè)網(wǎng)頁(yè)對(duì)應(yīng)的 HTML:

 

整個(gè) HTML 里面,甚至連 JavaScript 都沒(méi)有。那么這段文字是哪里來(lái)的呢?

有點(diǎn)經(jīng)驗(yàn)的同學(xué),可能會(huì)想到看一下這個(gè)example.css文件,其內(nèi)容如下:

 

沒(méi)錯(cuò),文字確實(shí)在這里面。其中::after,我們稱之為偽元素(Pseudo-element)[1]。

對(duì)于偽元素里面的文字,應(yīng)該如何提取呢?當(dāng)然,你可以使用正則表達(dá)式來(lái)提取。不過(guò)我們今天不準(zhǔn)備講這個(gè)。

XPath 沒(méi)有辦法提取偽元素,因?yàn)?XPath 只能提取 Dom 樹(shù)中的內(nèi)容,但是偽元素是不屬于 Dom 樹(shù)的,因此無(wú)法提取。要提取偽元素,需要使用 CSS 選擇器。

由于網(wǎng)頁(yè)的 HTML 與 CSS 是分開(kāi)的。如果我們使用 requests 或者 Scrapy,只能單獨(dú)拿到 HTML 和 CSS。單獨(dú)拿到 HTML 沒(méi)有任何作用,因?yàn)閿?shù)據(jù)根本不在里面。單獨(dú)拿到 CSS,雖然有數(shù)據(jù),但如果不用正則表達(dá)式的話,里面的數(shù)據(jù)拿不出來(lái)。所以 BeautifulSoup4的 CSS 選擇器也沒(méi)有什么作用。所以我們需要把 CSS 和 HTML 放到一起來(lái)渲染,然后再使用JavaScript 的 CSS 選擇器找到需要提取的內(nèi)容。

首先我們來(lái)看一下,為了提取這個(gè)偽元素的值,我們需要下面這段Js 代碼:

window.getComputedStyle(document.querySelector('.fake_element'),':after').getPropertyValue('content')

其中,ducument.querySelector的第一個(gè)參數(shù).fake_element就表示值為fake_element的 class 屬性。第二個(gè)參數(shù)就是偽元素:after。運(yùn)行效果如下圖所示:

 

為了能夠運(yùn)行這段 JavaScript,我們需要使用模擬瀏覽器,無(wú)論是 Selenium 還是 Puppeteer 都可以。這里以 Selenium 為例。

在 Selenium 要執(zhí)行 Js,需要使用driver.execute_script()方法,代碼如下:

 

提取出來(lái)的內(nèi)容最外層會(huì)包上一對(duì)雙引號(hào),拿到以后移除外側(cè)的雙引號(hào),就是我們?cè)诰W(wǎng)頁(yè)上看到的內(nèi)容了。

參考資料

 

[1]偽元素(Pseudo-element): https://developer.mozilla.org/zh-CN/docs/Web/CSS/Pseudo-elements

本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 未聞Code
相關(guān)推薦

2022-03-12 20:38:14

網(wǎng)頁(yè)Python測(cè)試

2021-06-08 21:36:24

PyCharm爬蟲Scrapy

2024-07-30 08:16:18

Python代碼工具

2023-10-28 12:14:35

爬蟲JavaScriptObject

2022-03-07 09:14:04

Selenium鼠標(biāo)元素

2021-09-14 21:29:01

項(xiàng)目環(huán)境變量

2021-10-15 21:08:31

PandasExcel對(duì)象

2025-05-28 03:15:00

Scrapy數(shù)據(jù)sleep

2024-10-16 21:47:15

2021-12-15 22:04:11

瀏覽器重復(fù)登錄

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2024-07-30 08:11:16

2024-01-29 00:45:36

跨域后端接口

2024-11-11 00:38:13

Mypy靜態(tài)類型

2021-05-08 19:33:51

移除字符零寬

2022-08-26 09:34:19

單元測(cè)試代碼項(xiàng)目

2022-01-26 07:35:10

爬蟲Requestsgzip

2021-09-26 05:01:55

Scrapy項(xiàng)目爬蟲

2021-04-27 22:15:02

Selenium瀏覽器爬蟲

2021-04-12 21:19:01

PythonMakefile項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)