欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Scrapy元素選擇器Xpath用法匯總

 更新時間:2021年03月23日 11:24:09   作者:思維之上  
這篇文章主要介紹了Scrapy元素選擇器Xpath用法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

 眾所周知,在設計爬蟲時,最麻煩的一步就是對網(wǎng)頁元素進行分析,目前流行的網(wǎng)頁元素獲取的工具有BeautifulSoup,lxml等,而據(jù)我使用的體驗而言,Scrapy的元素選擇器Xpath(結合正則表達式)是其中較為出色的一種(個人認為最好啦,當然只能在Scrapy中使用)功能相對較全、使用較為方便,正因為它的豐富性,有時很多功能會忘記,所以在這里整理好記錄下來,方便今后查閱使用。

1. 元素的多級定位與跳級定位

多級定位:依靠html中的多級元素逐步縮小范圍

response.xpath('//table/tbody/tr/td')

//如果知道元素所屬的下標可以用下標選擇
response.xpath('//table/tbody/tr[1]/td')

跳級定位:符號“//”表示跳級定位,即對當前元素的所有層數(shù)的子元素(不僅是第一層子元素)進行查找,一般xpath的開頭都是跳級定位

response.xpath('//span//table')

2. 依靠元素的屬性定位

每個html元素都有很多屬性,如id、class、title、href、text(href和text往往可以配合正則表達式)等,這些屬性往往具有很強的特殊性,結合元素多級定位或跳級定位會更準確高效,下面舉幾個典型的例子,其他的舉一反三

利用class定位

response.xpath('//td[@class="mc_content"]')

利用href配合正則表達式定位

response.xpath('//a[re:test(@href,"^\/index\.php\?m=News&a=details&id=1&NewsId=\d{1,4}")]')

利用text結合正則表達式定位

a=response.xpath('//a[re:test(text(),"\w{4}")]')

此外,xpath還有對于html元素操作的兩個實用的函數(shù)(可以用正則表達式代替)——starts-with和contains;

a=response.xpath('//a[starts-with(@title,"注冊時間")]')

a=response.xpath('//a[contains(text(),"聞")]')

3. 提取元素或元素的屬性值

首先是最基本的extract()函數(shù),提取被定為的元素對象

a=response.xpath('//a[contains(text(),"聞")]').extract()

//如果被定為的元素對象有多個,可以有用下標指定
a=response.xpath('//a[contains(text(),"聞")]').extract()[1]

提取元素的屬性

//提取text
a=response.xpath('//a[contains(text(),"聞")]/text()').extract()

//獲取href
a=response.xpath('//a[contains(text(),"聞")]/@href').extract()

//獲取name
a=response.xpath('//a[contains(text(),"聞")]/@name').extract()

此時我們的正則表達式又閑不住了(scrapy自帶的函數(shù)),可以對提取的元素進行選擇

//對href中的部分字符串進行選擇
response.xpath('//a[@name="_l_p_n"]/@href').re('\/s.*?list\.htm')

在這里關于xpath的所有用法基本總結完畢,只是由于xpath是對靜態(tài)元素進行匹配選擇,對于javascript往往束手無策,這時不得不用一個自動化測試工具——selenium,可以實現(xiàn)各種動態(tài)事件和靜態(tài)元素的選擇,只是selenium往往比較吃內(nèi)存,響應時間也比較慢,對于大型的爬蟲任務盡量不要使用,畢竟有一些javascript元素是內(nèi)嵌在網(wǎng)頁代碼中的,這時候結合萬能的正則表達式,xpath往往能夠?qū)崿F(xiàn)。如下:

link = re.search("javascript:goToPage\('(.*?)'", value) //value為包含該段的字符串

到此這篇關于Scrapy元素選擇器Xpath用法匯總的文章就介紹到這了,更多相關Scrapy元素選擇器Xpath 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 解決遇到:PytorchStreamReader failed reading zip archive:failed finding central錯誤問題

    解決遇到:PytorchStreamReader failed reading zip&n

    本文針對"PytorchStreamReaderfailedreadingziparchive:failedfindingcentral"錯誤提出解決方案,包括檢查文件完整性、文件路徑,嘗試更新PyTorch版本,檢查壓縮文件格式,代碼問題,或?qū)で蠹夹g支持等,希望這些經(jīng)驗能給遇到同樣問題的人一個參考
    2024-09-09
  • PyCharm GUI界面開發(fā)和exe文件生成的實現(xiàn)

    PyCharm GUI界面開發(fā)和exe文件生成的實現(xiàn)

    這篇文章主要介紹了PyCharm GUI界面開發(fā)和exe文件生成,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Python利用Flask動態(tài)生成漢字頭像

    Python利用Flask動態(tài)生成漢字頭像

    這篇文章主要為大家詳細介紹了Python如何利用Flask動態(tài)生成一個漢字頭像,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,需要的可以參考一下
    2023-01-01
  • Python批量發(fā)送post請求的實現(xiàn)代碼

    Python批量發(fā)送post請求的實現(xiàn)代碼

    昨天學了一天的Python(我的生產(chǎn)語言是java,也可以寫一些shell腳本,算有一點點基礎),今天有一個應用場景,就正好練手了
    2018-05-05
  • windows下pycharm搭建spark環(huán)境并成功運行 附源碼

    windows下pycharm搭建spark環(huán)境并成功運行 附源碼

    這篇文章主要介紹了windows下pycharm搭建spark環(huán)境并成功運行 附源碼,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • python迭代器與生成器詳解

    python迭代器與生成器詳解

    迭代器和生成器都是Python中特有的概念,迭代器可以看作是一個特殊的對象,每次調(diào)用該對象時會返回自身的下一個元素,從實現(xiàn)上來看,一個可迭代的對象必須是定義了__iter__()方法的對象,而一個迭代器必須是定義了__iter__()方法和next()方法的對象。
    2016-03-03
  • Python matplotlib實時畫圖案例

    Python matplotlib實時畫圖案例

    這篇文章主要介紹了Python matplotlib實時畫圖案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 100?個?Python?小例子(練習題四)

    100?個?Python?小例子(練習題四)

    這篇文章主要給大家分享100?個?Python?小例子,前文分享了一二三,本文的四十最后一篇了,這篇就把100道python小練習全分享完了,感興趣的小伙伴也可以去練習前幾期內(nèi)容,洗碗給這幾篇文章給你的學習帶來幫助
    2022-01-01
  • Django結合使用Scrapy爬取數(shù)據(jù)入庫的方法示例

    Django結合使用Scrapy爬取數(shù)據(jù)入庫的方法示例

    這篇文章主要介紹了Django結合使用Scrapy爬取數(shù)據(jù)入庫的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • python操作MySQL數(shù)據(jù)庫具體方法

    python操作MySQL數(shù)據(jù)庫具體方法

    堅持每天學一點,每天積累一點點,作為自己每天的業(yè)余收獲,這個文章是我在吃飯的期間寫的,利用自己零散的時間學了一下python操作MYSQL,所以整理一下。我采用的是MySQLdb操作的MYSQL數(shù)據(jù)庫。先來一個簡單的例子吧
    2013-10-10

最新評論