网络爬虫-数据解析
xpath
什么是Xpath?
XPath即为XML路径语言(XML Path Language),它是一种在XML和HTML中查找信息的语言,可用来在XML和HTML文档中对元素和属性进行遍历。
Xpath语法
- 选取结点
表达式 | 描述 | 示例 | 结果 |
---|---|---|---|
nodename | 选取此节点的所有结点 | bookstore | 选取bookstore节点下的所有的子节点 |
/ | 如果是在最前面,代表从根节点选取。否则选择某节点下的某个节点 | /bookstore | 选取根元素下的所有bookstore节点 |
// | 从全局节点中选择节点,随便在哪个位置 | book | 从全局节点中找到所有book节点 |
@ | 选取某个节点的属性 | //book[@price] | 选择所有price属性的book节点 |
- 谓语
路径表达式 | 描述 |
---|---|
/bookstore/book[1] | 选取bookstore下的第一个子元素 |
/bookstore/book[last()] | 选取bookstore下的倒数第二个book元素 |
/bookstore/book[position() < 3] | 选取bookstore下的前面两个子元素 |
//book[@price=10] | 选取所有price属性等于10的元素 |
使用lxml解析html代码
1.解析html字符串,使用lxml.etree.HTML
进行解析,示例代码如下:
html = etree.HTML(text)
print(etree.tostring(html,encoding="utf-8").decode('utf-8'))
2.解析html文件,使用lxml.etree.parse
进行解析,示例代码如下:
html = etree.parse("baidu.html")
print(etree.tostring(html,encoding="utf-8").decode('utf-8'))
这个函数默认使用的是XML
解析器,但是当遇到一些不规范的HTML
代码时就会解析错误,这时就要自己创建HTML
解析器
parser = etree.HTMLParser(encoding='utf-8')
html = etree.parse("baidu.html",parser = parser)
print(etree.tostring(html,encoding="utf-8").decode('utf-8'))
lxml结合xpath注意事项:
1.使用xpath
语法应该使用ELement.xpath
方法。来执行xpath的选择,示例代码如下:
trs = html.xpath("//poisition()>1")
2.获取某个标签的属性:
href = html.xpath("//a/@href")
#获取a标签对应href属性的值
3.获取文本,是通过xpath
中的text()
函数,示例代码如下:
address = html.xpath("./td[4]/text()")[0]
4.在某个标签下,在执行xpath函数
,获取这个标签下的子孙元素,那么应该在斜杠之前加一个点,代表是在当前元素下获取,示例代码如下:
address = html.xpath("./td[4]/text()")[0]