如何解決python xpath爬取頁面得到空列表(語法都對的情況下)


引言:

很多網頁呈現給我們的靜態頁面,但是實際上是由服務器端的動態頁面生成的。再加上網站設有反爬蟲機制,所以抓取到的頁面不一定和源碼相同。

所以!!從源碼里copy xpath,不一定能取到數據!

實例:

非常的簡單,從百度首頁上,抓取“新聞”這兩個字。

import requests
from lxml import etree
url="http://www.baidu.com"
ua={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
bd = requests.get(url, headers=ua)
bd.encoding='utf-8'

接下來打印一下我們抓取到的頁面

print(bd.text)

看不出來啥,當然了,不出問題的話,你會以為這就是頁面的源碼。

然后我們試一下打印“百度一下“這個按鈕的文本。

numl=html.xpath('//*[@id="su"]//@value')
輸出:百度一下

 好,可以,沒問題。

試一下打印”新聞“。網頁源碼上 新聞、地圖、貼吧.... 這些<a>標簽都在一個id為"u_sp"的div下,那么:

res = html.xpath('//*[@id="u_sp"]/a[1]//text()')

 這樣寫,能輸出”新聞“在理論上是沒錯的,但我特喵搞了好久,啊喂怎么老是空啊?

id不行我試試class吧,這幾個<a>標簽的class都是”mnav",

res = html.xpath('//*[@class="mnav"]//text()')

輸出:['新聞', 'hao123', '地圖', '視頻', '貼吧', '學術']

res = html.xpath('//*[@class="mnav"]//text()')[0]

輸出:['新聞']

看來,class可以,那id為什么不行,也不是所有的id不行,剛才“百度一下”就可以的啊。

看了一下打印出來的抓取的頁面代碼,????id什么時候成了"u1"了,谷歌瀏覽器查看源碼明明是“u_sp”啊!

於是,

res = html.xpath('//*[@id="u1"]/a[1]//text()')

 輸出:['新聞']

 

 

學習之路漫長......

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM