之前一直在用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)