python爬蟲學習筆記(10)xpath

2021-10-08 14:33:59 字數 2460 閱讀 7843

xpath:最常用且最便攜高效的一種解析方式,通用性。

xpath解析原理:

1.例項化乙個etree的物件,且 需要將被解析的頁面原始碼資料載入到該物件中。

2.呼叫etree物件中的xpath 方法結合著xpath表示式實現標籤的定位和內容的捕獲。

環境的安裝:

pip install lxml

如何例項化乙個etree物件

from lxml import etree

1.將本地的 html文件中的 原始碼資料載入到 etree物件中:

etree.parse(filepath)

2.可以將從網際網路上獲取的原始碼資料載入到該物件中

etree.html(『page_text』)

xpath(『xpath表示式』)

xpath表示式

/表示乙個層級

//表示的是多個層級

下面三種表達方式得到的結果是一樣的hg

/html/body/div

/html//div

//div

屬性定位://div[@class=『song』]/ tag[@attrname=「attrvalue」]

輸出第三個p索引是從1開始的,不是0

//div[@class=「song」]/p[3]

取文字/text() 獲取的是便簽中 直系的文字內容

//text()獲取的是標籤中非直系的文字,在多個層級之後的標籤中的文字也能獲得。

取屬性/@屬性名

例:爬58同城二手房資訊

from lxml import etree

import requests

if __name__ ==

'__main__'

: headers =

#爬取到頁面原始碼資料

url =

''response = requests.get(url=url, headers=headers).text

#資料解析

tree = etree.html(response)

#儲存li標籤物件

li_list = tree.xpath(

'//ul[@class="house-list-wrap"]/li'

) fp = open(

'58.txt','w',encoding=

'utf-8'

)#解析單獨的li標籤

for li in li_list:

title = li.xpath(

'./div[2]/h2/a/text()'

)[0]

fp.write(title +'\n'

)

import requests

from lxml import etree

import os

if __name__ ==

"__main__"

: url =

''headers =

response = requests.get(url=url, headers=headers)

#設定響應資料的編碼格式

page_text = response.text

#資料解析:src的屬性值 alt屬性

tree = etree.html(page_text)

li_list = tree.xpath(

'//div[@class="slist"]//li'

)#建立乙個資料夾

#通用處理中文亂碼的解決方案

img_name = img_name.encode(

'iso-8859-1'

).decode(

'gbk'

)# print(img_name, img_src)

#print(img_name, img_src)

#請求進行持久化儲存

img_data = requests.get(url=img_src,headers=headers).content

img_path =

'piclibs/' + img_name

with open(img_path, 'wb'

) as fp:

fp.write(img_data)

)

10x程式設計師工作法筆記

我在某平台上學習10x程式設計師工作法,特此記錄下我結合工作中實際情況對10x程式設計師工作法的理解與總結 作為程式設計師,我們將其看作乙個值得全情投入的職業,希望能夠把精力放在設計演算法 改進設計 優化系統這些具有創造性與成就感的本職工作上。由於偶然複雜度造成的差距會有多大呢?1975 年,弗雷德...

10X單細胞測序細胞分類

介紹 文章對已知的多種細胞系混合後進行單細胞10x rna測序,研究多轉殖之間的互作模式。我們這裡介紹裡面的單細胞測序基因表達細胞分類操作。不過文章選用的是已知固有snp進行分類,基因表達分類用於和snp分類進行比較。講解 讀入qc後的seurat obj,過濾 見之前的部落格 根據測序的細胞系個數...

榮耀x10和小公尺10x的區別 哪個好

紅公尺10x採用6.57英吋e2材質的三星amoled螢幕,支援螢幕指紋識別。紅公尺10x正面螢幕採用了水滴屏的設計,相信對於螢幕有強迫症的小夥伴肯定不會喜歡!榮耀x10更多使用感受和評價 榮耀10x為了成全 曲面屏 則採用了公升降前置攝像頭的設計!榮耀10x的背面後置攝像頭的設計則繼承了華為p系列...