網路爬蟲之網頁資料解析(XPath)

2021-10-06 14:04:06 字數 3520 閱讀 4873

xpath定義

xpath表示式

lxml庫

xpath案例

引入有人說,我正則用的不好,處理html文件很累,有沒有其他的方法?

有!那就是xpath,我們可以先將網路獲取的string型別資料轉換成 html/xml文件,然後用 xpath 查詢 html/xml 節點或元素。

什麼是xml

大家都知道html,那xml又是什麼呢?

**:[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-vuerznsf-1590634079149)(c:\users\王利欽\desktop\爬蟲總結\xml**1.jpg)]

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-0pxx1cj1-1590634079153)(c:\users\王利欽\desktop\爬蟲總結\xml**2.jpg)]

xml的節點關係

父、子、同胞、先輩、後代

xpath定義

xpath (xml path language) 是一門在 xml 文件中查詢資訊的語言,可用來在 xml 文件中對元素和屬性進行遍歷。

xpath表示式

lxml庫

定義lxml資料轉換

'''#利用etree.html,將string字串解析為html文件

html = etree.html(

str)

result = etree.tostring(html)

print

(result.decode(

'utf-8'))

所得資料

'''

'''

lxml讀取檔案

醉臥沙場君莫笑,古來征戰幾人回

兩岸猿聲啼不住,輕舟已過萬重山

一騎紅塵妃子笑,無人知是荔枝來

停車坐愛楓林晚,霜葉紅於二月花

商女不知亡國恨,隔江猶唱後庭花

李白君不見黃河之水天上來,奔流到海不復回

李白乘舟將欲行,忽聞岸上踏歌聲

桃花潭水深千尺,不及汪倫送我情

雷軍356893

are you ok

會飛的豬

xpath具體用法

'''html = etree.html(data)

result = html.xpath(

'//li//span'

)print

(result[0]

.text)

獲取< li >標籤下的< a >標籤的所有class

# 獲取 標籤下的標籤裡的所有 class

from lxml import etree

html = etree.parse(

'hello.html'

)result = html.xpath(

'//li/a//@class'

)print

(result)

獲取最後乙個< li >的< a >的href

from lxml import etree

xml = etree.parse(

'./hello.html'

)result = xml.xpath(

'//li[last()]/a/@href'

)print

(result)

獲取倒數第二個元素的內容

from lxml import etree

html = etree.parse(

'hello.html'

)result = html.xpath(

'//li[last()-1]/a'

)print

(result[0]

.text)

print

(result)

獲取class值為bold的標籤名

# 獲取 class 值為 bold 的標籤名

from lxml import etree

html = etree.parse(

'hello.html'

)result = html.xpath(

'//*[@class="bold"]'

)# tag方法可以獲取標籤名

print

(result[0]

.tag)

print

(result[0]

.text)

條件使用

xpath案例

import requests

from lxml import etree

url1 =

''url =

'list_%d.html'

if __name__ ==

'__main__'

: fp =

open

('./duanzi.csv'

,mode =

'a',encoding=

'utf-8'

)for i in

range(1

,101):

if i ==1:

url_duanzi = url1

else

: url_duanzi = url%

(i) response = requests.get(url_duanzi)

response.encoding =

'gbk'

content = response.text

html = etree.html(content)

result = html.xpath(

'//ul[@class="piclist longlist"]/li'

)for li in result:

try:

title = li.xpath(

'.//h4/a/b/text()')[

0]content = li.xpath(

'.//div[@class="f18 mb20"]/text()')[

0].strip(

).strip(

'\n'

) info =

''.join(li.xpath(

'.//div[@class="ft"]/span//text()')[

1:])

fp.write(

'%s\t%s\t%s\n'

%(title,content,info)

)except exception as e:

# 異常儲存,第二天,分析,單獨爬取。

pass

print

('第%d頁內容儲存成功!'

%(i)

) fp.close(

)# !!!缺少異常捕獲

網路爬蟲之網頁資料解析(正則re)

正規表示式測試 title u 你好,hello,世界,天安門,願望 pattern re.compile u u4e00 u9fa5 result pattern.findall title print result 貪婪模式與非貪婪模式import re str aatest1 bbtest2 ...

爬蟲之網頁資料提取

爬蟲流程 指定url 發請求收響應 解資料存資料 資料解析方法分類 正則 各程式語言都可以用 bs4 python獨有 xpath 重點,各種程式語言都可用 bs4.beautifulsoup 提供的方法和屬性 例項化beautifulsoup的方法 本地html檔案 例 beautifulsoup...

網頁資料抓取 爬蟲

資料抓取其實從字面意思就知道它是抓取資料的,在網際網路世界中,資料量是乙個非常大的。有時候靠人為去獲取資料這是乙個非常不明智的。尤其是你需要的資料來自很多不同的地方。網路爬蟲是是一種按照一定的規則,自動地抓取網際網路 資訊的程式或者指令碼。它主要抓取形式有兩種 1種是抓取網頁鏈結,通過url鏈結得到...