Xpath与Css选择器使用技巧

xpath提取含有多个属性值的标签

很多情况下我们在爬虫的时候会遇到,一个标签里一个属性对应多个值,那么如何,但又不想将所有属性值全部写完整,为了方便可以选取其中唯一的值,这里提供xpath支持的语法。

例: 这里有如下标签,我们想提取其中的1
测试标签1

使用(contains方法)

1
response.xpath('//div[@class="post-adds"]/span[contains(@class, "vote-post-up")]/h10/text()').extract()[0]

常用CSS选择器用法

表达式 说明
* 选择所有节点
#container 选择所有id为container的节点
.container 选择所有class为container的节点
li a 选择所有li下的所有a标签
ul + p 选择ul后面的第一个p标签
div#container > ul 选择id为container的div的第一个ul子标签
ul ~ p 选择与ul相邻的所有p标签
a[href] 选择所有有title元素的a标签
a[href=”http://baidu.com"] 选择所有href属性为http://baidu.com的a标签
a[href*=”baidu”] 选择所有href属性里面包含有baidu的a标签
a[href^=”http”] 选择所有href属性以http开头的a标签
a[href$=”.png”] 选择所有href属性以.png结尾的a标签
input[type=radio]:checked 选择选中的radio标签

xpath与css选择器获取标签内容

例:

1
2
3
<div class="test">
<h1>测试标签</h1>
</div>
1
2
3
4
5
6
7
8
# xpath使用
response.xpath('//div[@class="test"]/h1/text()').extract()[0]

# css使用
response.css('.test h1::text').extract_first()

# extract方法将selector转化为字符串或者使用extract_first()取出第一个
# 从而可以省去写异常

xpath与css选择器获取标签属性

1
2
3
<div class="test">
<a class="title" href="http://baidu.com">百度一下</a>
</div>
1
2
3
4
5
6
7
# xpath获取

response.xpath('//div[@class="test"]/a/@href').extract()

# css获取

response.css('.test a.title::attr(href)').extract()