xpath資料提取時 :先分組 再提取
2.1 lxml模組入門
1.匯入lxml 的 etree 庫(匯入沒有提示不代表不能用)
from lxml import etree
2.利用etree.html 將字串轉化為element物件,element物件具有xpath的方法,該方法返回結果為列表。() 中text能夠接收bytse型別的資料和str型別的資料
html = etree.html(text)
ret_list = html.xpath("xpath字串") # 返回列表
3.把轉化後的element 物件轉化為字串,返回bytes型別結果etree.tostring(element)
假設我們現有如下的html 字串,嘗試對他們進行操作:
from lxml import etree
text =
''''''
# 利用etree.html,將html字串轉化為element物件,該物件具有xpath方法
html = etree.html(text)
print
(html)
# 把element物件轉化為字串
print
(etree.tostring(html)
.decode(
))
輸出:
可以發現,lxml可以把標籤補充完整,但是 lxml 也是人寫的,很多時候由於網頁不夠規範,或者lxml的bug,即使參考url位址對應的響應去提取資料,仍然獲取不到,這個時候我們需要使用etree.tostring的方法,觀察 etree 到底把 html 轉化成了什麼樣子,即根據轉化後的html字串去進行資料的提取。
2.2 html.xpath() 的使用
提取以下新聞的標題和鏈結 組成乙個字典
from lxml import etree
text =
""""""
html = etree.html(text)
# ret_list = html.xpath("//li[@class]/a/@href|//li[@class]/a/text()")
# print(ret_list)
key_list = html.xpath(
"//li[@class]/a/@href"
)print
(key_list)
value_list = html.xpath(
"//li[@class]/a//text()"
)print
(value_list)
"""將兩個字串 對應的組成乙個字典"""
dict1 =
for key in key_list:
# 這種方法不好 如果缺失乙個標題 所有資料都會亂套
dict1[key]
= value_list[key_list.index(key)
]print
(dict1)
輸出:
['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
['first item', 'second item', 'third item', 'fourth item', 'fifth item']
如果缺失一條資料,所有字典對應都會出錯,下邊來解決這個問題。
2.3 lxml模組的高階使用
text =
"""
"""html = etree.html(text)
ret = html.xpath(
"//li/a/@href"
)print
(ret)
# ['link2.html']
from lxml import etree
text =
""" first item
"""html = etree.html(text)
ret = html.xpath(
"//li"
)print
(ret)
# [, ]
text =
"""
"""html = etree.html(text)
ret = html.xpath(
"//div/a"
)print
(ret)
#
2.4 針對2.2缺陷的改進from lxml import etree
text =
""""""
html = etree.html(text)
print
(html)
li_list = html.xpath(
"//li"
)print
(li_list)
dict1 =
dict()
for li in li_list:
dict1 =
dict()
# xpath 查詢不到不會報錯 會返回空列表 空列表取值會報錯 所以加個判斷
dict1[
"title"
]= li.xpath(
"./a//text()")[
0]iflen
(li.xpath(
"./a//text()"))
>
0else
none
dict1[
"href"
]= li.xpath(
"./a/@href")[
0]iflen
(li.xpath(
"./a/@href"))
>
0else
none
print
(dict1)
輸出:
[, , , , ]
資料提取之XPATH
2.資料提取 xpath語法和 lxml模組 xpath是一門在xml和html文件中查詢資訊的語言 原本設計適用於xml的,但xml和html兩者的語法極為相似,所以也可以使用html 谷歌瀏覽器下是xpath 火狐瀏覽器下是try xpath 360瀏覽器下也相容xpath,使用時需要開啟開發者...
資料提取之re
貪婪模式 匹配任意字元 非貪婪模式 以.開頭 以.結尾 轉義str hello ret re.match h str print ret.group 結果為h group 會輸出完成的匹配結果 group 1 會輸出完整匹配中 用第1個 括起來的字串 分組 使用 的方式 1 group 和group...
Linux文字資料提取之head,tail例項詳解
提取開頭或結尾數行 顯示標準輸入前n 條記錄,或者命令列檔案列表的每乙個的前n 條記錄 head n n file s head n file s awk fnr n file s sed e nq file s sed nq file s 例項 gz fieldyang test awk fnr ...