最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python數(shù)據(jù)提取-lxml模塊

 更新時間:2022年01月25日 16:39:17   作者:鋼鐵男兒?  
這篇文章主要介紹了Python數(shù)據(jù)提取-lxml模塊,lxml模塊和xpath語法的關(guān)系,lxml模塊的使用場景、lxml模塊的安裝、谷歌瀏覽器xpath?helper插件的安裝和使用等相關(guān)內(nèi)容介紹,需要的朋友可以參考一下

知識點:

  • 了解lxml模塊和xpath語法的關(guān)系;
  • 了解lxml模塊的使用場景;
  • 了解lxml模塊的安裝;
  • 了解 谷歌瀏覽器xpath helper插件的安裝和使用;
  • 掌握xpath語法-基礎(chǔ)節(jié)點選擇語法;
  • 掌握 xpath語法 -節(jié)點修飾語法;
  • 掌握xpath語法 - 其他常用語法;
  • 掌握 lmxl模塊中使用xpath語法定位元素提取數(shù)學值或文本內(nèi)容;
  • 掌握lxml模塊etree.tostring函數(shù)的使用;

1、了解lxml模塊和xpath語法

html或xml形式的文本提取特定的內(nèi)容,就需要我們掌握lxml模塊的使用和xpath語法。

lxml模塊可以利用xPath規(guī)則語法,來快速的定位HEML \ XML 文檔中特定元素以及獲取節(jié)點信息(文本內(nèi)容、屬性值);
XPath (XML Path Language)是一門HTML\XML 文檔中查找信息的語言,可用來在HTML|XML文檔中對元素和屬性進行遍歷。
提取xml、html的數(shù)據(jù)需要lxml模塊和xpath語法配合使用;

2、谷歌瀏覽器xpath helper插件的安裝和使用

  • 在谷歌瀏覽器中對當前頁面測試xpath語法規(guī)則。
  • 谷歌瀏覽器xpath helper插件的安裝和使用

我們以windows為例進行xpath helper的安裝。

xpath helper插件的安裝:

  • 1)、下載Chrome插件 XPath Helper
  • 可以在Chrome應用商城進行下載,如果無法下載,也可以從下面的鏈接進行下載
  • 2)、把文件的后綴名crx改為rar,然后解壓到同名文件夾中;
  • 3)、把解壓后的文件夾拖入到已經(jīng)開啟開發(fā)者模式的chrome瀏覽器擴展程序界面;

3、xpath 的節(jié)點關(guān)系

學習xpath語法需要先了解xpath中的節(jié)點關(guān)系。

3.1 xpath中的節(jié)點什么

每個html、xml的標簽我們都稱之為節(jié)點,其中最頂層的節(jié)點稱為根節(jié)點。我們以xml為例、html也是一樣的。、

3.2 xpath中節(jié)點的關(guān)系

author title的第一個兄弟節(jié)點。

4、xpath語法 - 選取節(jié)點以及提取屬性或文本內(nèi)容的語法

  • 1)、XPath 使用路徑表達式來選取XML文檔中的節(jié)點或者節(jié)點集。
  • 2)、這些路徑表達式和我們在常規(guī)的電腦文件系統(tǒng)中看到的表達式非常相似;
  • 3)、使用chrome插件選擇標簽時候,選中的標簽會添加屬性class=“xh-highlight”;

4.1 xpath定位節(jié)點以及提取屬性或文本內(nèi)容的語法

5、xpath 語法 - 選取特定節(jié)點的語法

可以根據(jù)標簽的屬性值,下標等來獲取特定的節(jié)點。

5.1 選取特定節(jié)點的語法

5.2 關(guān)于xpath的下標

在xpath中,第一個元素的位置是1;
最后一個元素的位置是last();
倒數(shù)第二個是last() - 1;

6、xpath語法 - 選取未知節(jié)點的語法

可以同通配符來選取未知的html、xml的元素。

6.1、選取未知節(jié)點的語法

7.lxml模塊的安裝與使用示例

lxml模塊是一個第三方模塊,安裝之后使用。

7.1 lxml模塊的安裝

對發(fā)送請求獲取的xml或html形式的響應內(nèi)容進行提取。

pip install lxml

7.2 爬蟲對html提取的內(nèi)容

提取標簽中的文本內(nèi)容;
提取標簽中的屬性的值;
比如,提取a標簽中href屬性的值,獲取url,進而繼續(xù)發(fā)起請求。

7.3 lxml模塊的使用

1)、導入lxml的etree庫

from lxml import etree

2)、利用etree.HTML,將html字符串(bytes類型或str類型)轉(zhuǎn)化為Element對象,Element對象具有xpath的方法,返回結(jié)果的類別。

html = etree.HTML(text)
ret_list = html.xpath("xpath語法規(guī)則字符串")

3)、xpath方法返回列表的三種情況
返回空列表:根據(jù)xpath語法規(guī)則字符串,沒有定位到任何元素;
返回由字符串構(gòu)成的列表:xpath字符串規(guī)則匹配的一定是文本內(nèi)容或某屬性的值;
返回由Element對象構(gòu)成的列表:xpath規(guī)則字符串匹配的是標簽,列表中的Element對象可以繼續(xù)進行xpath;

import requests
from lxml import etree

class Tieba(object):

? ? def __init__(self,name):
? ? ? ? self.url = "https://tieba.baidu.com/f?ie=utf-8&kw={}".format(name)
? ? ? ? self.headers = {
? ? ? ? ? ? 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
? ? ? ? }

? ? def get_data(self,url):
? ? ? ? response = requests.get(url,headers=self.headers)
? ? ? ? with open("temp.html","wb") as f:
? ? ? ? ? ? f.write(response.content)

? ? ? ? return response.content

? ? def parse_data(self,data):
? ? ? ? # 創(chuàng)建element對象
? ? ? ? data = data.decode().replace("<!--","").replace("-->","")
? ? ? ? html =etree.HTML(data)

? ? ? ? el_list = html.xpath('//li[@class="j_thread_list clearfix"]/div/div[2]/div[1]/div[1]/a')
? ? ? ? #print(len(el_list))

? ? ? ? data_list = []

? ? ? ? for el in el_list:
? ? ? ? ? ? temp = {}
? ? ? ? ? ? temp['title'] = el.xpath("./text()")[0]
? ? ? ? ? ? temp['link'] = 'http://tieba.baidu.com' + el.xpath("./@href")[0]
? ? ? ? ? ? data_list.append(temp)

? ? ? ? # 獲取下一頁url
? ? ? ? try:
? ? ? ? ? ? next_url = 'https:' + html.xpath('//a[contains(text(),"下一頁"]/@href')[0]
? ? ? ? except:
? ? ? ? ? ? next_url = None

? ? ? ? return data_list,next_url

? ? def save_data(self,data_list):
? ? ? ? for data in data_list:
? ? ? ? ? ? print(data)

? ? def run(self):
? ? ? ? # url
? ? ? ? # headers
? ? ? ? next_url = self.url

? ? ? ? while True:

? ? ? ? ? ? # 發(fā)送請求,獲取響應
? ? ? ? ? ? data = self.get_data(self.url)
? ? ? ? ? ? # 從響應中提取數(shù)據(jù)(數(shù)據(jù)和翻頁用的url)
? ? ? ? ? ? data_list,next_url = self.parse_data(data)

? ? ? ? ? ? self.save_data(data_list)

? ? ? ? ? ? print(next_url)

? ? ? ? ? ? # 判斷是否終結(jié)
? ? ? ? ? ? if next_url == None:
? ? ? ? ? ? ? ? break

if __name__ == '__main__':
? ? tieba =Tieba("傳智播客")
? ? tieba.run()

8、lxml模塊中etree.tostring函數(shù)的使用

運行下邊的代碼,觀察對比html的原字符串和打印輸出的結(jié)果

from lxml import etree

html_str = """<div<<ul>
? ? ? ? <li class="item-1"><a href="link1.html" rel="external nofollow" >first item</a></li>
? ? ? ? <li class="item-1"><a href="link2.html" rel="external nofollow" >second item</a></li>
? ? ? ? <li class="item-inactive"><a href="link3.html" rel="external nofollow" >third item</a></li>
? ? ? ? <li class="item-1"><a href="link4.html" rel="external nofollow" >fourth item</a></li>
? ? ? ? <li class="item=0"><a href="link5.html" rel="external nofollow" >fifth item</a>
? ? ? ? </ur></div>
"""

html = etree.HTML(html_str)

handeled_html_str = etree.tostring(html).decode()
print(handeled_html_str)

結(jié)論:

  • lxml.etree.HTML(html_str)可以自動補全標簽;
  • lxml.etree.tostring 函數(shù)可以將轉(zhuǎn)換位Element對象再轉(zhuǎn)換回html字符串;
  • 爬蟲如果使用lxml來提取數(shù)據(jù),應該以lxml.etree.tostring 的返回結(jié)果作為提取數(shù)據(jù)的依據(jù);

到此這篇關(guān)于Python數(shù)據(jù)提取-lxml模塊的文章就介紹到這了,更多相關(guān)Python -lxml模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python基于opencv批量生成驗證碼的示例

    python基于opencv批量生成驗證碼的示例

    這篇文章主要介紹了python基于opencv批量生成驗證碼的示例,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python圖片裁剪實例代碼(如頭像裁剪)

    Python圖片裁剪實例代碼(如頭像裁剪)

    本篇文章主要介紹了Python圖片裁剪實例代碼(如: 頭像裁剪),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 用Python進行數(shù)據(jù)清洗以及值處理

    用Python進行數(shù)據(jù)清洗以及值處理

    這篇文章主要介紹了用Python進行數(shù)據(jù)清洗以及值處理,數(shù)據(jù)分析中,數(shù)據(jù)清洗是一個必備階段。數(shù)據(jù)分析所使用的數(shù)據(jù)一般都很龐大,致使數(shù)據(jù)不可避免的出現(xiàn)重復、缺失、異常值等異常數(shù)據(jù),如果忽視這些異常數(shù)據(jù),可能導致分析結(jié)果的準確性,需要的朋友可以參考下
    2023-07-07
  • 基于Python實現(xiàn)自動化生成數(shù)據(jù)報表

    基于Python實現(xiàn)自動化生成數(shù)據(jù)報表

    這篇文章主要介紹了如何使用Python自動化生成數(shù)據(jù)報表,從而提高效率,再也不用一條條數(shù)據(jù)創(chuàng)建Excel數(shù)據(jù)報表了,感興趣的同學可以試一試
    2022-01-01
  • 使用Python編寫電腦定時關(guān)機小程序

    使用Python編寫電腦定時關(guān)機小程序

    這篇文章主要為大家詳細介紹了如何使用Python編寫電腦定時關(guān)機小程序,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • Keras之自定義損失(loss)函數(shù)用法說明

    Keras之自定義損失(loss)函數(shù)用法說明

    這篇文章主要介紹了Keras之自定義損失(loss)函數(shù)用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python中的二分查找Bisect庫使用實戰(zhàn)

    Python中的二分查找Bisect庫使用實戰(zhàn)

    在算法和數(shù)據(jù)結(jié)構(gòu)中,二分查找是一種高效的搜索算法,可用于有序數(shù)據(jù)集合的查找,Python的bisect庫為我們提供了便捷的二分查找實現(xiàn),本文將深入探討B(tài)isect庫的使用方法、性能優(yōu)勢,并通過豐富的示例代碼展示其在實際應用中的靈活性和效果
    2024-01-01
  • Python Web編程之WSGI協(xié)議簡介

    Python Web編程之WSGI協(xié)議簡介

    這篇文章主要介紹了Python Web編程之WSGI協(xié)議,簡單說明了WSGI的概念、功能并結(jié)合實例形式分析了Gunicorn和uWSGI相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-07-07
  • Python基于隨機采樣一至性實現(xiàn)擬合橢圓

    Python基于隨機采樣一至性實現(xiàn)擬合橢圓

    這篇文章主要為大家詳細介紹了Python如何基于隨機采樣一至性實現(xiàn)擬合橢圓,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-11-11
  • Python進階之路模塊、包和異常處理詳解

    Python進階之路模塊、包和異常處理詳解

    這篇文章主要介紹了Python進階之路模塊、包和異常處理的相關(guān)資料,文中通過實例演示,展示了如何構(gòu)建模塊化的應用并遵循最佳實踐,需要的朋友可以參考下
    2024-12-12

最新評論

偏关县| 曲阜市| 塔河县| 喀喇沁旗| 信丰县| 禹州市| 大悟县| 碌曲县| 台南市| 津南区| 正蓝旗| 枞阳县| 通渭县| 蓬安县| 武定县| 阿图什市| 新安县| 林芝县| 通海县| 绥滨县| 双流县| 通渭县| 东阿县| 大冶市| 嘉禾县| 长顺县| 射洪县| 新河县| 闸北区| 沙雅县| 佛山市| 文成县| 南木林县| 许昌市| 临夏市| 东山县| 星座| 民权县| 马关县| 洛宁县| 丁青县|