python lxml模块
继续分析那个爬虫程序,今天从中学习了lxml模块的基本使用。这个模块用来解析XML、HTML内容,据说速度上秒杀了”美丽的汤”。
官网: http://lxml.de/api/index.html
1 | #coding=utf-8 |
结果如下:
1 | <type 'str'> |
可以看出,自动修复了不规则的html代码并且获得了我们想要的数据。
http://lxml.de/api/lxml.html.clean.Cleaner-class.html
这个清理,默认会把page_structure=True,清理掉html、title等,所以使用时候要注意。
make_links_absolute(self, base_url=None, resolve_base_href=True)这个也很有用,提供一个base_url,将页面中所有url都转化为绝对(加上base_url)路径
至于div = html.xpath(“//div”)为什么用//,这个和xpath有关,下面列出了最有用的路径表达式:
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
路径表达式 | 结果 |
---|---|
bookstore | 选取 bookstore 元素的所有子节点。 |
/bookstore | 选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! |
bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
//book | 选取所有 book 子元素,而不管它们在文档中的位置。 |
bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
//@lang | 选取名为 lang 的所有属性。 |