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)
(result.decode(
'utf-8'))
所得資料
'''
'''
lxml讀取檔案
醉臥沙場君莫笑,古來征戰幾人回
兩岸猿聲啼不住,輕舟已過萬重山
一騎紅塵妃子笑,無人知是荔枝來
停車坐愛楓林晚,霜葉紅於二月花
商女不知亡國恨,隔江猶唱後庭花
李白君不見黃河之水天上來,奔流到海不復回
李白乘舟將欲行,忽聞岸上踏歌聲
桃花潭水深千尺,不及汪倫送我情
雷軍356893
are you ok
會飛的豬
xpath具體用法
'''html = etree.html(data)
result = html.xpath(
'//li//span'
(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鏈結得到...