[关闭]
@Dukebf 2017-07-12T00:07:01.000000Z 字数 1864 阅读 1392

python之lxml学习

python


前人轮子:
lxml 官网
Python爬虫利器三之Xpath语法与lxml库的用法

lxml 是 python 中解析 html 的一个模块。最好配合cssselect模块来使用
安装方法:

  1. git clone https://github.com/lxml/lxml.git lxml
  2. cd lxml
  3. pyton setup.py install
  4. python -m pip install cssselece

假设
假设有个 网站 http://demo.org ,代码如下:

  1. <html>
  2. <body>
  3. <div>
  4. <ul>
  5. <li class="item-0" title='0.3'><a href="link1.html">first item</a></li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-inactive"><a href="link3.html">third item</a></li>
  8. <li class="item-1"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </body>
  13. </html>

解析字符串

使用 lxmlhtml模块 来解析html字符串,获取 class=item-0 的节点,并打印第一个节点
使用例子:

  1. import lxml.html
  2. import requests
  3. html = requests.get('http://demo.org')
  4. tree = lxml.html.fromstring( html )
  5. item = tree.cssselect("li.item-0")
  6. print lxml.html.tostring(item[0],method='text',encoding='utf-8')

lxmlhtml.tostring方法是用来打印节点,它的使用例子有如下:

  1. >>> from lxml import html
  2. >>> root = html.fragment_fromstring('<p>Hello<br>world!</p>')
  3. >>> html.tostring(root)
  4. '<p>Hello<br>world!</p>'
  5. >>> html.tostring(root, method='html')
  6. '<p>Hello<br>world!</p>'
  7. >>> html.tostring(root, method='xml')
  8. '<p>Hello<br/>world!</p>'
  9. >>> html.tostring(root, method='text')
  10. 'Helloworld!'
  11. >>> html.tostring(root, method='text', encoding='unicode')
  12. u'Helloworld!'
  13. >>> root = html.fragment_fromstring('<div><p>Hello<br>world!</p>TAIL</div>')
  14. >>> html.tostring(root[0], method='text', encoding='unicode')
  15. u'Helloworld!TAIL'
  16. >>> html.tostring(root[0], method='text', encoding='unicode', with_tail=False)
  17. u'Helloworld!'
  18. >>> doc = html.document_fromstring('<p>Hello<br>world!</p>')
  19. >>> html.tostring(doc, method='html', encoding='unicode')
  20. u'<html><body><p>Hello<br>world!</p></body></html>'

获取标签属性

  1. >>> item0 = lxml.html.cssselect(".item-0")[0]
  2. >>> value = itme0.get('title')

读取文件

假设有个demo.html的文件,内容还是demo.org的内容
利用 lxmletree.parse 来读取文件,例子

  1. from lxml import etree
  2. html = etree.parse('html')
  3. result = etree.tostring(html,pretty_print=True)
  4. print result
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注