python html parser庫lxml的介紹和使用(快速入門)

來源:互聯網
上載者:User

lxm是python的一個html/xml解析並建立dom的庫,lxml的特點是功能強大,效能也不錯,xml包含了ElementTree
,html5lib
,beautfulsoup
等庫,但是lxml也有自己相對應的庫,所以,導致lxml比較複雜,初次使用者很難瞭解其關係。

 

安裝lxml

lxml安裝依賴

python-devel,libxml2-devel,libxslt-devel,

裝好之後,下載

http://codespeak.net/lxml/lxml-2.2.8.tgz,

tar zxvf lxml-2.2.8.tgz,

然後python setup.py install即可

 

 

1.  解析html並建立dom

>>> import lxml.etree as etree

>>> html = '<html><body id="1">abc<div>123</div>def<div>456</div>ghi</body></html>'
>>> dom = etree.fromstring(html)
>>> etree.tostring(dom)
'<html><body id="1">abc<div>123</div>def<div>456</div>ghi</body></html>'

如果用beautifulsoup的解析器,則

>>> import lxml.html.soupparser as soupparser
>>> dom = soupparser.fromstring(html)
>>> etree.tostring(dom)
'<html><body id="1">abc<div>123</div>def<div>456</div>ghi</body></html>'

 

但是我強烈建議使用soupparser,因為其處理不規範的html的能力比etree強太多。

 

2.  按照Dom訪問Element

子項目長度

>>> len(dom)
1

 

訪問子項目:

>>> dom[0].tag
'body'

 

逐一查看:

>>> for child in dom:
...     print child.tag
...
body

 

查看節點索引

>>>body = dom[0]

>>> dom.index(body)
0

 

位元組點擷取父節點

>>> body.getparent().tag
'html'

 

訪問所有子節點

>>> for ele in dom.iter():
...     print ele.tag
...
html
body
div
div

 

3. 訪問節點屬性

>>> body.get('id')
'1'

也可以這樣

>>> attrs = body.attrib
>>> attrs.get('id')
'1'

 

4. 訪問Element的內容

>>> body.text
'abc'
>>> body.tail

text只是從本節點開始到第一個位元組點結束;tail是從最後一個位元組結束到本節點未知。

 

訪問本節點所有文本資訊

>>> body.xpath('text()')
['abc', 'def', 'ghi']

 

訪問本節點和子節點所有文本資訊

>>> body.xpath('//text()')
['abc', '123', 'def', '456', 'ghi']

貌似返回本文檔中所有文字資訊

 

body.text_content()返回本節點所有文本資訊。

 

5.Xpath的支援

所有的div元素

>>> for ele in dom.xpath('//div'):
...     print ele.tag
...
div
div

 

id=“1”的元素

>>> dom.xpath('//*[@id="1"]')[0].tag
'body'

 

body下的第1個div

>>> dom.xpath('body/div[1]')[0].tag
'div'

 

 

參考:

lxml的官方文檔:http://codespeak.net/lxml/

HtmlParser的效能:http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.