成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么不要輕易使用 Chrome 復制的 XPath?

系統 瀏覽器
以本文的例子來說,在 HTML 的官方規范里面,表格的正文確實應該包在標簽里面。但現在大多數情況下,前端開發者都會省略這個標簽,所以真正的源代碼里面是沒有這個標簽的。

[[385009]]

有一些同學在寫爬蟲的時候,喜歡在Chrome 開發者工具里面直接復制 XPath,如下圖所示:

 

他們覺得這樣復制出來的 XPath 雖然長了點,但是工作一切正常,所以頻繁使用。

但我希望大家不要過于依賴這個功能。因為它給出的結果僅作參考,有時候并不能讓你提取出數據。我們來看一個例子。

 

這是一個非常簡單的HTML 頁面,頁面中有一個表格,表格有一列叫做電話。我現在想把這里面的5個電話提取出來。如果直接使用 Chrome 的復制 XPath 的功能,我們可以得到下面這個 XPath:

  1. /html/body/div/table/tbody/tr[3]/td[4] 

這實際上對應了劉小三這一行的電話字段。那么,我們去掉tr后面的數字,似乎就能覆蓋到所有行了:

  1. /html/body/div/table/tbody/tr/td[4]/text() 

在 XPath Helper 上面運行看看效果,確實提取出了所有的電話號碼,如下圖所示:

 

但如果你使用 requests 來爬這個網頁,然后使用 XPath 提取電話號碼,你就會發現什么都提取不到,如下圖所示:

 

你可能會想,這應該是異步加載導致的問題。表格里面的數據是通過 Ajax 后臺加載的,不在網頁源代碼里面。

那么我們打印看看網頁的源代碼:

 

大家可以看到,數據就在網頁源代碼里面,那為什么我們在Chrome 上面通過 XPath Helper 就能提取數據,而用 requests 就無法提取數據?

實際上,如果大家仔細觀察從 Chrome 中復制出來的 XPath,就會發現它里面有一個tbody節點。但是我們的網頁源代碼是沒有這個節點的。

這就要說到 Chrome 開發者工具里面顯示的 HTML 代碼,跟網頁真正的源代碼之間的區別了。很多人分不清楚這兩者的區別,所以導致寫出的 XPath 匹配不到數據。

當我們說到網頁源代碼的時候,我們指的是在網頁上右鍵,選擇“顯示網頁源代碼”按鈕所查看到的 HTML 代碼,如下圖所示:

 

這個查看源代碼的頁面長成下圖所示的這樣:

 

注意地址欄,是以view-source:開頭的。這才是網頁真真正正的源代碼。

而Chrome 的開發者工具里面的Element標簽所顯示的源代碼,長成下面這樣:

 

這兩個地方的HTML代碼可能是不一樣的,而且在現代化的網站中,這兩個地方的 HTML大概率是不一樣的。當我們使用 requests 或者 Scrapy 時,拿到的是第一種情況的源代碼,這才是網頁真正的源代碼。而在開發者工具里面的 HTML 代碼,是經過 Chrome 瀏覽器修飾甚至大幅度增刪后的 HTML 代碼。當網站有異步加載時,JavaScript 可以輕易在這里增加、刪除非常多的內容。即使網站沒有異步加載,如果網站原始的 HTML 代碼編寫不夠規范,或者存在一些錯漏,那么 Chrome 瀏覽器會自動糾錯和調整。

以本文的例子來說,在 HTML 的官方規范里面,表格的正文確實應該包在標簽里面。但現在大多數情況下,前端開發者都會省略這個標簽,所以真正的源代碼里面是沒有這個標簽的。而 Chrome 會自動識別到這種情況,然后自動加上這個標簽,所以在開發者工具里面看到的 HTML 代碼是有這個標簽的。

 

當你寫爬蟲的時候,不僅僅是 Chrome 開發者工具里面復制的 XPath 僅作參考,甚至這個開發者工具里面顯示的 HTML 代碼也是僅作參考。你應該首先檢查你需要的數據是不是在真正的源代碼里面,然后再來確定是寫 XPath 還是抓接口。如果是寫 XPath,那么更應該以這個真正的源代碼為準,而不是開發者工具里面的 HTML 代碼。

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2021-10-26 06:34:12

系統設計服務

2022-12-06 08:26:16

SpringAOPthis調用方法

2023-07-20 20:54:09

2023-06-29 18:08:41

2024-02-20 22:13:49

SQL語句編程

2011-05-10 10:07:53

Windows

2015-06-04 11:22:22

前端程序員

2021-11-11 15:25:28

@AsyncJava線程池

2019-03-25 14:53:35

人工智能AI開發者

2015-08-27 16:48:11

FirefoxChrome

2010-08-06 10:29:56

蘋果

2015-06-05 11:23:19

前端為什么不要你

2011-12-20 09:01:25

.NET

2012-05-24 10:29:54

編程程序員

2022-03-01 09:45:51

芯片自研技術

2022-07-04 11:04:16

數據可視化圖形化設計圖表

2024-01-03 08:15:35

Executors線程池線程

2011-02-22 09:50:21

2015-07-28 10:28:54

程序員代碼

2018-05-07 15:59:39

代碼程序員重寫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区二区三区 | 欧美综合一区 | 9久9久9久女女女九九九一九 | 欧美日韩久久久 | 亚洲自拍偷拍欧美 | 一级黄色毛片a | 亚洲v日韩v综合v精品v | 国产精品免费一区二区三区四区 | 在线免费观看毛片 | 91精品国产综合久久久久久漫画 | 色偷偷噜噜噜亚洲男人 | 成人免费激情视频 | 精品在线一区 | h视频在线播放 | 成人三级视频在线观看 | 国产片一区二区三区 | 国产精品99久 | 精品国产乱码久久久久久蜜臀 | 国产精品美女久久久久 | 欧美精品在欧美一区二区 | 中文字幕视频在线观看 | 欧美午夜精品 | 国产综合视频 | 一区二区三区高清 | 欧美午夜视频 | 国产一区二区三区高清 | 国产高清精品网站 | 精品欧美一区二区精品久久久 | 国产精品久久一区 | 国产成人综合一区二区三区 | 2019天天干天天操 | 三级视频国产 | 亚洲91 | 国产精品永久免费观看 | 国产精品美女久久久久久免费 | 精品在线99 | 91在线看片 | 日本免费一区二区三区四区 | 国产精品一二三区 | 最新国产福利在线 | 蜜臀久久 |