python-xpath獲取html文檔的部分內(nèi)容
有些時(shí)候我在們需要的用正則提取出html中某一個(gè)部分的文字內(nèi)容,如圖:
獲取dd部分的html文檔,我們要通過(guò)它的一個(gè)屬性去確定他的位置才可以拿到他這個(gè)部分我們可以看到他的這個(gè)屬性class='row clearfix ',然后用xpath去獲取到這部分:
name = tree.xpath("http://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("http://dd[@class='row clearfix ']") print(name)
如果直接打印他是不能夠出來(lái)的,
我們需要對(duì)Element進(jìn)行處理,用到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("http://dd[@class='row clearfix ']") name1 = html.tostring(name[0]) print(name1)
打印截圖:
但是大家可以看到里面的等內(nèi)容并不是中文,原因是我們使用tostring方法輸出的是修正后的HTML代碼,但是結(jié)果是bytes類型,在python中bytes類型是不可以進(jìn)行編碼的,需要轉(zhuǎn)換成字符串,使用代碼name1.decode(),此時(shí)我們將bytes類型轉(zhuǎn)換為str(字符串)類型。
那么此時(shí)我們關(guān)鍵是如何將$#26080;此類的符號(hào)轉(zhuǎn)換成漢字?。。∧敲词紫纫闱宄@是什么編碼?這類符號(hào)是HTML、XML 等 SGML 類語(yǔ)言的轉(zhuǎn)義序列。它們不是”編碼“,也就是說(shuō)我們不能使用utf-8、gbk等編碼進(jìn)行處理,需要使用HTMLParse進(jìn)行處理,完整代碼如下:
from lxml import html import requests from html.parser import HTMLParser #導(dǎo)入html解析庫(kù) 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("http://dd[@class='row clearfix ']") name1 = html.tostring(name[0]) name2 = HTMLParser().unescape(name1.decode()) print(name2)
此時(shí)運(yùn)行結(jié)果如下:
那么此時(shí)就已經(jīng)大功告成了!?。?/p>
以上這篇python-xpath獲取html文檔的部分內(nèi)容就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python中requests庫(kù)+xpath+lxml簡(jiǎn)單使用
- python使用XPath解析數(shù)據(jù)爬取起點(diǎn)小說(shuō)網(wǎng)數(shù)據(jù)
- python 網(wǎng)頁(yè)解析器掌握第三方 lxml 擴(kuò)展庫(kù)與 xpath 的使用方法
- python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲(chǔ)到django模型中
- Python Selenium XPath根據(jù)文本內(nèi)容查找元素的方法
- python Xpath語(yǔ)法的使用
- python3顯式變量類型typing的實(shí)現(xiàn)
- Python使用xpath實(shí)現(xiàn)圖片爬取
- 利用Python中的Xpath實(shí)現(xiàn)一個(gè)在線匯率轉(zhuǎn)換器
- python selenium xpath定位操作
- Python xpath表達(dá)式如何實(shí)現(xiàn)數(shù)據(jù)處理
- Python利用Xpath選擇器爬取京東網(wǎng)商品信息
- Python使用requests xpath 并開啟多線程爬取西刺代理ip實(shí)例
- python3 xpath和requests應(yīng)用詳解
- Python3 xml.etree.ElementTree支持的XPath語(yǔ)法詳解
- 關(guān)于python中的xpath解析定位
- python定位xpath 節(jié)點(diǎn)位置的方法
- Python自動(dòng)化之定位方法大殺器xpath
相關(guān)文章
關(guān)于python多進(jìn)程中的常用方法詳解
這篇文章主要介紹了關(guān)于python多進(jìn)程中的常用方法詳解,python中的多線程其實(shí)并不是真正的多線程,如果想要充分地使用多核CPU資源,在python中大部分情況需要使用多進(jìn)程,需要的朋友可以參考下2023-07-07

python 用opencv調(diào)用訓(xùn)練好的模型進(jìn)行識(shí)別的方法

Python使用socket模塊實(shí)現(xiàn)簡(jiǎn)單tcp通信

python實(shí)現(xiàn)通過(guò)flask和前端進(jìn)行數(shù)據(jù)收發(fā)

Python操作MySQL簡(jiǎn)單實(shí)現(xiàn)方法

Python使用functools模塊中的partial函數(shù)生成偏函數(shù)

一文掌握python中的__init__的意思及使用場(chǎng)景分析