真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中XML、HTML和Xpath是什么-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站與策劃設(shè)計,成安網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:成安等地區(qū)。成安做網(wǎng)站價格咨詢:13518219792

這篇文章將為大家詳細講解有關(guān)Python中XML、HTML和Xpath是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

當我們處理HTML文檔感到十分棘手的時候,我們可以先將HTML文件轉(zhuǎn)換成XML文檔,然后用XPath查找HTML節(jié)點或元素。

什么是XML

(1)XML 是可擴展標記語言(EXtensible Markup Language)

(2)XML 是一種標記語言,很類似 HTML

(3)XML 的設(shè)計宗旨是傳輸數(shù)據(jù),而非顯示數(shù)據(jù)

(4)XML 的標簽需要我們自行定義。

(5)XML 被設(shè)計為具有自我描述性。

(6)XML 是 W3C 的推薦標準。

XML 和 HTML 的區(qū)別

Python中XML、HTML和Xpath是什么XML文檔示例



  
    this is title
    hello world
  

HTML DOM 模型示例

HTML DOM 定義了訪問和操作 HTML 文檔的標準方法,以樹結(jié)構(gòu)方式表達 HTML 文檔。

Python中XML、HTML和Xpath是什么

什么是XPath?

XPath (XML Path Language) 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。

XPath 開發(fā)工具

(1)開源的XPath表達式編輯工具:XMLQuire(XML格式文件可用)

(2)Chrome插件 XPath Helper

(3)Firefox插件 XPath Checker

選取節(jié)點

XPath 使用路徑表達式來選取 XML 文檔中的節(jié)點或者節(jié)點集。這些路徑表達式和我們在常規(guī)的電腦文件系統(tǒng)中看到的表達式非常相似。

下面列出了最常用的路徑表達式:

Python中XML、HTML和Xpath是什么

在下面的表格中,我們已列出了一些路徑表達式以及表達式的結(jié)果:

Python中XML、HTML和Xpath是什么

謂語(Predicates)

謂語用來查找某個特定的節(jié)點或者包含某個指定的值的節(jié)點,被嵌在方括號中。

在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結(jié)果:

Python中XML、HTML和Xpath是什么選取未知節(jié)點

XPath 通配符可用來選取未知的 XML 元素。

Python中XML、HTML和Xpath是什么

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結(jié)果:

Python中XML、HTML和Xpath是什么

選取若干路徑

通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結(jié)果:

Python中XML、HTML和Xpath是什么

XPath的運算符

下面列出了可用在 XPath 表達式中的運算符:

Python中XML、HTML和Xpath是什么

這些就是XPath的語法內(nèi)容,在運用到Python抓取時要先轉(zhuǎn)換為xml。

lxml庫

lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 數(shù)據(jù)。

lxml和正則一樣,也是用 C 實現(xiàn)的,是一款高性能的 Python HTML/XML 解析器,我們可以利用之前學(xué)習(xí)的XPath語法,來快速的定位特定元素以及節(jié)點信息。

lxml python 官方文檔:http://lxml.de/index.html

需要安裝C語言庫,可使用 pip 安裝:pip install lxml (或通過wheel方式安裝)

我們利用它來解析 HTML 代碼,簡單示例:

from lxml import etree

text = '''
    
             
  • first item
  •          
  • second item
  •          
  • third item
  •          
  • fourth item
  •          
  • fifth item # 注意,此處缺少一個 li 閉合標簽      
 
''' # 利用etree.HTML,將字符串解析為HTML文檔 html = etree.HTML(text) # 按字符串序列化HTML文檔 # html = etree.tostring(html).decode("utf8")  # 不能正常顯示中文 html = etree.tostring(html, encoding="utf-8", pretty_print=True, method="html").decode("utf-8")  # 可以正常顯示中文 print(html)

運行結(jié)果如下:


    
             
  • first item
  •          
  • second item
  •          
  • third item
  •          
  • fourth item
  •          
  • fifth item # 注意,此處缺少一個 li 閉合標簽      

lxml 可以自動修正 html 代碼,例子里不僅補全了 li 標簽,還添加了 body,html 標簽。

文件讀取:

除了直接讀取字符串,lxml還支持從文件里讀取內(nèi)容。我們新建一個 index.html 文件:

    
             
  • first item
  •          
  • second item
  •          
  • third item
  •          
  • fourth item
  •          
  • fifth item
  •      
 

再利用 etree.parse() 方法來讀取文件。

from lxml import etree

# 讀取外部文件 hello.html
html = etree.parse('./index.html', etree.HTMLParser())  # 指定解析器HTMLParser會根據(jù)文件修復(fù)HTML文件中缺失的如聲明信息
html = etree.tostring(html, encoding="utf-8", pretty_print=True, method="html").decode("utf-8")

print(html)

運行結(jié)果:


    
             
  • first item
  •          
  • second item
  •          
  • third item
  •          
  • fourth item
  •          
  • fifth item
  •      
 

接下來我們看一下 XPath 的實力測試。

1. 獲取所有的

  • 標簽

    from lxml import etree
     
    html = etree.parse('./index.html', etree.HTMLParser())
    print(type(html))  # 
    
    result = html.xpath('//li')
    
    print(result)  # []
    print(len(result))  # 5
    print(type(result))  # 
    print(type(result[0]))  # 

    2. 繼續(xù)獲取

  • 標簽的所有 class屬性

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    result = html.xpath('//li/@class')
    
    print(result)  # ['item-0', 'item-1', 'item-inactive', 'item-1', 'item-0']

    3. 繼續(xù)獲取

  • 標簽下hre 為 link1.html 的 標簽

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    result = html.xpath('//li/a[@href="link1.html"]')
    
    print(result)  # []

    4. 獲取

  • 標簽下的所有 標簽

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    # result = html.xpath('//li/span')
    # 注意這么寫是不對的:因為 / 是用來獲取子元素的,而  并不是 
  •  的子元素,所以,要用雙斜杠 result = html.xpath('//li//span') print(result)  # []
  • 5. 獲取

  • 標簽下的標簽里的所有 class

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    result = html.xpath('//li/a//@class')
     
    print(result)  # ['bold']

    6. 獲取最后一個

  • 的 href

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    result = html.xpath('//li[last()]/a/@href')
    # 謂語 [last()] 可以找到最后一個元素
     
    print(result)  # ['link5.html']

    7. 獲取倒數(shù)第二個元素的內(nèi)容

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    result = html.xpath('//li[last()-1]/a')
    
    # text 方法可以獲取元素內(nèi)容
    print(result[0].text)  # fourth item

    8. 獲取 class 值為 bold 的標簽名

    from lxml import etree
    
    html = etree.parse('./index.html', etree.HTMLParser())
    result = html.xpath('//*[@class="bold"]')
    
    # tag方法可以獲取標簽名
    print(result[0].tag)  # span

    關(guān)于Python中XML、HTML和Xpath是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


    分享文章:Python中XML、HTML和Xpath是什么-創(chuàng)新互聯(lián)
    分享網(wǎng)址:
    http://weahome.cn/article/jpgio.html
  • 其他資訊

    在線咨詢

    微信咨詢

    電話咨詢

    028-86922220(工作日)

    18980820575(7×24)

    提交需求

    返回頂部