lxml和xpath

注意:lxml要和xpath一起使用,这里的xpath获取的结果是列表,不能使用extract_first()和extract()方法

一、lxml(解析库)

1、优点:速度快,用于爬取大型网站

2、安装:https://www.cnblogs.com/wt7018/p/11773612.html

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、建立在已有查找的基础上查找

..  当前节点的父节点

.   当前节点

 

 

posted @ 2019-11-05 23:25  市丸银  阅读(124)  评论(0编辑  收藏  举报