lxml: 它可以分析xml文件,html是xml的子集,所以分析html文檔可以使用正則也可以使用lxml
示例文檔
<bookstore>
<li id='test3'> li test3</li>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
<li>li test1</li>
<li id='test2'>li test2</li>
</book>
</bookstore>
<test>
<li id='test3'>li test4</li>
</test>
lxml示例
實例1: 找到
/bookstore/book/title
實例: 找到book裏面所有li
/bookstore/book/li
實例: 找到bookstore裏面所有li
/bookstore/book/li|/bookstore/li (|表示或的意思)
/bookstore//li //表示不管層次只要是li全部找到
實例: 找到整個文檔中的li
//li
實例:找到所有含有id屬性的li
//li[@id]
實例:找到所有含有id屬性的li,並且id的值爲test3
//li[@id=‘test3’]
實例:找到所有li的id屬性
//li/@id 得到標籤中的屬性值
//li/text() 得到標籤中的內容
一個完整示例:
from lxml import etree
html = ''' <bookstore>
<li id='test3'> li test3</li>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
<li>li test1</li>
<li id='test2'>li test2</li>
</book>
</bookstore>
<test>
<li id='test3'>li test4</li>
</test>'''
dom = etree.HTML(html)
ret = dom.xpath('//li/text()')
print(ret)
ret = dom.xpath('//li/@id')
print(ret)
一個完整示例:
from lxml import etree
html = ''' <bookstore>
<li id='test3'> li test3</li>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
<li>li test1</li>
<li id='test2'>li test2</li>
</book>
</bookstore>
<test>
<li id='test3'>li test4</li>
</test>'''
dom = etree.HTML(html)
ret = dom.xpath('//li[@id]')
for li in ret:
print(li.text)
print(li.attrib['id'])
print(etree.tostring(li).decode())
print('=' * 50)