日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xpath 第一个元素_XPath

發布時間:2025/10/17 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xpath 第一个元素_XPath 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XPath即為XML路徑語言(XML Path Language),它是一種用來確定XML文檔中某部分位置的語言,但它同樣適用于HTML的文檔搜索。

在爬蟲中我們使用xpath提取特定位置的文本內容

相關鏈接:

XPath用法:http://www.w3school.com.cn/xpath/index.asp

目錄

1、XPath語法 2、準備工作

3、功能示范 4、屬性獲取

5、屬性匹配 6、例子示范


1、XPath語法

用法及結果:

2、準備工作

xpath在python中是lxml庫中的一個功能,所以首先要確保安裝好lxml庫,若沒有安裝可以參考前面的文章——爬蟲開發環境部署(一)

3、例子示范

我們要從這段html中提取出XPath

from lxml import html html_text = ''' <html> <head></head> <body> <div class="name"> <span class="title">XPath</span> </div> <div class="name"> <span class="text">爬蟲</span> </div> </body> </html> ''' etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div/span[1]/text()') print(result)

方法二,把div的class屬性加上(這種方式在實際應用中經常用到)

etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[1]/text()') print(result)

運行結果:

['XPath', '爬蟲']

調用HTML類進行初始化,這樣就成功構造了一個XPath解析對象,也可以自動修正HTML文本,變成符合規則的文本。如果我們要提取文本的話需要在xpath規則后加/text()。

我們發現結果是列表['XPath', '爬蟲'],里面有兩個字符串,但是我們只想要XPath那我們要怎么做呢?發現XPath的span標簽的class屬性是title,而爬蟲的class屬性是text,我們只需要在把span標簽的屬性在明確一下就可以了

etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[@class="title"]/text()') print(result)

運行結果:

['爬蟲']

4、屬性獲取

屬性獲取可以獲取html標簽里的屬性值,多用在獲取網頁鏈接上

例如我要獲取百度一下的網站地址:

from lxml import htmlhtml_text = ''' <html> <head></head> <body> <div class="name"> <a href="https://www.baidu.com">百度一下</span> </div> </body> </html> ''' etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/a/@href') print(result)

運行結果:

['https://www.baidu.com']

5、屬性匹配

屬性匹配包含屬性多值匹配和多屬性匹配

  • 5.1、屬性多值匹配

例如我們要獲取span標簽的XPath:

from lxml import htmlhtml_text = ''' <div class="name"> <span class="title text">XPath</span> </div> ''' etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[@class="title"]/text()') print(result)

運行結果:

[]

居然是空列表為什么呢?

我們可以看到span標簽的class屬性中有兩個屬性值,這時就要用到contains()函數了,代碼如下:

etree = html.etree a = etree.HTML(html_text) result = a.xpath('//div[@class="name"]/span[contains(@class, "title")]/text()') print(result)

運行結果:

['XPath']

  • 5.2、多屬性匹配

有些標簽有多個屬性,這時需要同時匹配多個屬性,這時要用到運算符and來連接,

例:

from

運行結果:

['XPath']

6、例子示范

接下來實戰一波

目標網站:https://gz.fang.lianjia.com/loupan

我們要獲取這些小區的名字

在網頁中點右鍵選擇檢查,我們會看到界面的右側出現了一堆看不懂的英文(其實這些就是網頁的源碼),點擊我標記紅框內的按鈕,這個按鈕是查找網頁元素的,點完后移到小區名上點擊一下就可以看到相關的源碼

我們可以很快的在源碼中找到我們所需要的金茂灣這幾個字,它是在一個a標簽中,在往上看發現這是一個在div標簽內的第一個a標簽的文本,這個div標簽的屬性是class="resblock-name",那xpath的規則就是:'//div[@class="resblock-name"]/a/text()'

同樣的原理我們查找越秀東坡,可以發現xpath規則和金茂灣的是一樣的,我們就可以推斷出這個網站的小區名應該都是這樣的,當然要獲取數據還需要配合requests庫,先請求獲取網頁的源碼

代碼如下:

from lxml import html import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36' }url = 'https://gz.fang.lianjia.com/loupan' reponse = requests.get(url, headers=headers) name_regex = '//div[@class="resblock-name"]/a/text()' etree = html.etree a = etree.HTML(reponse.text) result = a.xpath(name_regex) print(result)

運行結果:

['金茂灣', '越秀東坡', '景業東湖洲豪園', '振業天頌花園', '珠光山水誠品', '天健匯', '保利花海灣', '保利半島', '時代幸匯', '綠地柏玥晶舍']

請求的時候一定要加入headers,不然會比封掉

headers也很好拿到

序號2隨便選都可以,然后把序號4的內容加入headers就好了

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的xpath 第一个元素_XPath的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。