注意:lxml要和xpath一起使用,这里的xpath获取的结果是列表,不能使用extract_first()和extract()方法
一、lxml(解析库)
1、优点:速度快,用于爬取大型网站
2、安装:
3、使用
from lxml import etree selector = etree.HTML(response.text)
二、xpath
1、定义:xpath是一门在XML文档中查找信息的语言
2、节点
元素 属性 文本 文档(根)节点
3、节点关系
父亲(Parent)
子(Children)
兄弟(Sibling)
先祖(Ancestor)
后代(Descendant)
4、选择器
xpath('//a') # 所有a标签(子孙后代) xpath('//a[2]') # 所有a标签,按索引找第二个 xpath('//a[@id]') # 所有a标签,并且含有id属性 xpath('//a[@id="i1"]') # 所有a标签,并且属性id='i1' xpath('//a[@href="link.html"][@id="i1"]') # 所有a标签,属性href="link.html" 而且 id="i1" xpath('//a[contains(@href, "link")]') # 所有a标签,属性href的值包含"link" xpath('//a[starts-with(@href, "link")]') # 所有a标签,属性href的值以"link"开头 xpath('//a[re:test(@id, "i\d+")]') # 所有a标签 属性id的值 符合正则表达式"i\d+"的规则 xpath('//a[re:test(@id, "i\d+")]/text()').extract() # 所有a标签,取text的值 xpath('//a[re:test(@id, "i\d+")]/@href').extract() # 所有a标签,取href的属性值 xpath('/html/body/ul/li/a/@href').extract() # 取所有的值 xpath('//body/ul/li/a/@href').extract_first() # 取第一个值
# 第一个元素 xpath('//a[1]') # 最后一个元素 xapth('//a[last()]') # 倒数第二个元素 xpath('//a[last()-1]') # 前两个元素 xpath('//a[position()<3]')
# 价格低于35.00的书 xpath('//book[price<35.00]') # class中包含book属性 xpath('//book[contains(@class, "book")]')
注意:
索引是从1开始的
最后一个元素[last()]
倒数第二个元素[last()-1]
前两个元素[position()<3]
5、细节
a、直接查找
// 从任意节点中选取
/ 从当前节点中选取
b、建立在已有查找的基础上查找
.. 当前节点的父节点
. 当前节点