前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selector的使用

selector的使用

作者头像
hankleo
发布2020-09-17 10:40:10
6650
发布2020-09-17 10:40:10
举报
文章被收录于专栏:Hank’s BlogHank’s Blog

安装parsel

代码语言:javascript
复制
pip install parsel

构造选择器

响应对象公开Selector实例对.selector属性:

代码语言:javascript
复制
>>> response.selector.xpath('//span/text()').get()
'good'

使用xpath和css查询响应非常常见,因此响应中还包含两个快捷方式:response.xpath()response.css()

代码语言:javascript
复制
>>> response.xpath('//span/text()').get()
'good'
>>> response.css('span::text').get()
'good'

使用选择器

为了完整起见,下面是完整的HTML代码:

代码语言:javascript
复制
<html>
 <head>
  <base href='http://example.com/' />
  <title>Example website</title>
 </head>
 <body>
  <div id='images'>
   <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
  </div>
 </body>
</html>

通过观察 HTML code 对于该页面,让我们构造一个用于选择标题标记内文本的xpath

代码语言:javascript
复制
>>> response.xpath('//title/text()')
[<Selector xpath='//title/text()' data='Example website'>]

要实际提取文本数据,必须调用选择器.get().getall()方法如下:

代码语言:javascript
复制
>>> response.xpath('//title/text()').getall()
['Example website']
>>> response.xpath('//title/text()').get()
'Example website'

.get()始终返回单个结果;如果有多个匹配项,则返回第一个匹配项的内容; 如果没有匹配项,则不返回任何匹配项。.getall()返回包含所有结果的列表。

css选择器可以使用css3伪元素选择文本或属性节点:

代码语言:javascript
复制
>>> response.css('title::text').get()
'Example website'

.xpath().css()方法可用于快速选择嵌套数据

代码语言:javascript
复制
>>> response.css('img').xpath('@src').getall()
['image1_thumb.jpg',
 'image2_thumb.jpg',
 'image3_thumb.jpg',
 'image4_thumb.jpg',
 'image5_thumb.jpg']

只提取第一个匹配的元素,则可以调用选择器.get()(或其别名).extract_first()

代码语言:javascript
复制
>>> response.xpath('//div[@id="images"]/a/text()').get()
'Name: My image 1 '

如果未找到元素,返回None

代码语言:javascript
复制
>>> response.xpath('//div[@id="not-exists"]/text()').get() is None
True

可以将默认返回值作为参数提供,以代替None

代码语言:javascript
复制
>>> response.xpath('//div[@id="not-exists"]/text()').get(default='not-found')
'not-found'

参考: https://pypi.org/project/parsel/ https://www.osgeo.cn/scrapy/topics/selectors.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构造选择器
  • 使用选择器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档