之前一直在用BeautifulSoup,怎么说呢,上手容易,但经常容易出现各种诡异的问题,却很难找到方法修改。
lxml.html是一个偏向底层的HTML解析器,速度秒杀BeautifulSoup。
网站:http://lxml.de/lxmlhtml.html
解析页面:
# 下载页面,转化编码
import urllib2
str = urllib2.urlopen("http://www.coder4.com").read().decode("utf-8")
# 解析lxml.html
ll = lxml.html.fromstring(str)
# 获取全部文本
print ll.text_content()
# 通过ID获取元素
elem = ll.get_element_by_id("top")
# 获取标签名 如 div
elem.tag
# 通过xpath返回所有的div
for tag in ll.findall('*div'):
print tag.text_content()
# 遍历所有的a标签:
for tag in ll.iterdescendants('a'):
print tag.tag
# 遍历一层,注意,只是之下一层!!
for tag in ll.iterchildren():
print tag.tag
# 遍历所有文本部分,这个会保证全(递归到最底下)、且不重复。
# 和text_content()一个意思,只不过每块分开了。
for text in ll.itertext():
print text
一些高级点的功能,清理,具体参数见文档http://lxml.de/api/lxml.html.clean.Cleaner-class.html:
# 清理HTML from lxml.html.clean import Cleaner cleaner = Cleaner(page_structure=False, links=False) print cleaner.clean_html(html)
这个清理,默认会把page_structure=True,清理掉html、title等,所以使用时候要注意以下。
这个也很有用,提供一个base_url,将页面中所有url都转化为绝对(加上base_url)路径:
ll.make_links_absolute(self, base_url=None, resolve_base_href=True)