python-xpath獲取html文件的部分內容
阿新 • • 發佈:2020-03-06
有些時候我在們需要的用正則提取出html中某一個部分的文字內容,如圖:
獲取dd部分的html文件,我們要通過它的一個屬性去確定他的位置才可以拿到他這個部分我們可以看到他的這個屬性class='row clearfix ',然後用xpath去獲取到這部分:
name = tree.xpath("//dd[@class='row clearfix ']") from lxml import html import requests url = 'http://navi.cnki.net/knavi/JournalDetail/GetArticleList?year=2018&issue=04&pykm=DZXU&pageIdx=0&pcode=CJFD' res = requests.get(url) tree = html.fromstring(res.text) name = tree.xpath("//dd[@class='row clearfix ']") print(name)
如果直接列印他是不能夠出來的,
我們需要對Element進行處理,用到name1 = html.tostring(name[0]),程式碼如下:
from lxml import html import requests url = 'http://navi.cnki.net/knavi/JournalDetail/GetArticleList?year=2018&issue=04&pykm=DZXU&pageIdx=0&pcode=CJFD' res = requests.get(url) tree = html.fromstring(res.text) name = tree.xpath("//dd[@class='row clearfix ']") name1 = html.tostring(name[0]) print(name1)
列印截圖:
但是大家可以看到裡面的等內容並不是中文,原因是我們使用tostring方法輸出的是修正後的HTML程式碼,但是結果是bytes型別,在python中bytes型別是不可以進行編碼的,需要轉換成字串,使用程式碼name1.decode(),此時我們將bytes型別轉換為str(字串)型別。
那麼此時我們關鍵是如何將$#26080;此類的符號轉換成漢字!!!那麼首先要搞清楚這是什麼編碼?這類符號是HTML、XML 等 SGML 類語言的轉義序列。它們不是”編碼“,也就是說我們不能使用utf-8、gbk等編碼進行處理,需要使用HTMLParse進行處理,完整程式碼如下:
from lxml import html import requests from html.parser import HTMLParser #匯入html解析庫 url = 'http://navi.cnki.net/knavi/JournalDetail/GetArticleList?year=2018&issue=04&pykm=DZXU&pageIdx=0&pcode=CJFD' res = requests.get(url) tree = html.fromstring(res.text) name = tree.xpath("//dd[@class='row clearfix ']") name1 = html.tostring(name[0]) name2 = HTMLParser().unescape(name1.decode()) print(name2)
此時執行結果如下:
那麼此時就已經大功告成了!!!
以上這篇python-xpath獲取html文件的部分內容就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。