引言:html
不少網頁呈現給咱們的靜態頁面,可是其實是由服務器端的動態頁面生成的。再加上網站設有反爬蟲機制,因此抓取到的頁面不必定和源碼相同。python
因此!!從源碼裏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)
看不出來啥,固然了,不出問題的話,你會覺得這就是頁面的源碼。url
而後咱們試一下打印「百度一下「這個按鈕的文本。視頻
numl=html.xpath('//*[@id="su"]//@value') 輸出:百度一下
好,能夠,沒問題。xml
試一下打印」新聞「。網頁源碼上 新聞、地圖、貼吧.... 這些<a>標籤都在一個id爲"u_sp"的div下,那麼:htm
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()')
輸出:['新聞']
學習之路漫長......