Scrapy学习 四 选择器用法


选择器用法

测试网站   

https://doc.scrapy.org/en/latest/_static/selectors-sample1.html

使用 scrapy shell 测试网站 进入交互模式

使用 xpath 抓取

>>> response.selector.xpath('//title/text()')
[<Selector (text) xpath=//title/text()>]

使用 css抓取

>>> response.selector.css('title::text')
[<Selector (text) xpath=//title/text()>]

此时,xpath和css选择的时候可以将selector方法直接省去

>>> response.xpath('//title/text()')
[<Selector (text) xpath=//title/text()>]
>>> response.css('title::text')
[<Selector (text) xpath=//title/text()>]

css获取属性使用两个冒号(::),结果为一个列表中有多个选择器标签

>>> response.xpath('//div[@id="images"]').css('img::attr(src)')
[<Selector xpath='descendant-or-self::img/@src' data='image1_thumb.jpg'>, <Selector xpath='descendant-or-self::img/@src' data='image2_thumb.jpg'>, <Selector xpath='descendant-or-self::img/@src' data='image3_thumb.jpg'>, <Selector xpath='descendant-or-self::img/@src' data='image4_thumb.jpg'>, <Selector xpath='descendant-or-self::img/@src' data='image5_thumb.jpg'>]

使用extract()可以将选择器选择的内容变成一个列表

response.xpath('//div[@id="images"]').css('img::attr(src)').extract()
['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg','image5_thumb.jpg']

使用extract_first可以将selector的第一个元素取出来

>>> response.xpath('//div[@id="images"]').css('img::attr(src)').extract_first()
'image1_thumb.jpg'

extract_frist可以设置default,如果查找不到就输出默认值

>>> response.xpath('//div[@id="images"]').css('img::attr(srcc)').extract_first(default='123')
'123'

匹配属性里包含某个字段的方法

>>> response.xpath('//a[contains(@href, "image")]/@href').extract()
['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']


>>> response.css('a[href*=image]::attr(href)').extract()
['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html']

匹配某个标签下的一个标签的属性

>>> response.css('a[href*=image] img::attr(src)').extract()
['image1_thumb.jpg', 'image2_thumb.jpg', 'image3_thumb.jpg', 'image4_thumb.jpg','image5_thumb.jpg']

使用re(正则表达式)匹配------默认会输出括号里需要匹配的内容

>>> response.css('a::text').extract()
['Name: My image 1 ', 'Name: My image 2 ', 'Name: My image 3 ', 'Name: My image4 ', 'Name: My image 5 ']


>>> response.css('a::text').re('Name\:(.*)')
[' My image 1 ', ' My image 2 ', ' My image 3 ', ' My image 4 ', ' My image 5 ']


>>> response.css('a::text').re_first('Name\:(.*)')
'My image 1'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值