scrapy框架选择器

24 篇文章 1 订阅
13 篇文章 1 订阅

scrapy框架选择器

Scrapy有自己的数据提取机制。它们被称为选择器,因为它们“选择”HTML文档的某些部分 XPath 或 CSS 表达。

  • XPath是一种在XML文档中选择节点的语言,也可以与HTML一起使用。

  • CSS是用于将样式应用于HTML文档的语言。它定义选择器,将这些样式与特定的HTML元素相关联。

参考文献:scrapy官方文档-选择器https://docs.scrapy.org/en/latest/topics/selectors.html

一、使用选择器

1.构建选择器

response.selector.xpath('//span/text()').get() #提取span标签内的值
  • 响应对象公开 Selector实例对 .selector 属性

selector是一个很薄的包装 parsel library;这个包装器的目的是提供更好的与slapy响应对象的集成。

parsel 是一个独立的网页爬取库,可以使用没有 Scrapy 。它使用 lxml库位于引擎盖下,并在LXML API之上实现一个简单的API。这意味着scrapy选择器在速度和解析精度方面与lxml非常相似。

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

    • response.xpath()

    • response.css()

      response.xpath('//span/text()').get() 	#xpath
      response.css('span::text').get()		#css
      
  • 如果需要,可以使用 Selector 直接。从文本构建:

    from scrapy.selector import Selector
    body = '<html><body><span>good</span></body></html>'
    Selector(text=body).xpath('//span/text()').get()
    

2.使用选择器

以scrapy官方文档为例示例:https://docs.scrapy.org/en/latest/_static/selectors-sample1.html

第一步:获取页面节点元素

response.xpath('//title/text()') #结果:[<Selector xpath='//title/text()' data='Example website'>]

第二步:获取文本内容

response.xpath('//title/text()').getall() 	#['Example website']
response.xpath('//title/text()').get()		#'Example website'
  • **.get()**总是返回一个结果;如果有多个匹配项,则返回第一个匹配项的内容;如果没有匹配项,则返回None。

  • **.getall()**返回包含所有结果的列表。

  • 除了使用例如**@srcXPath之外,还可以使用.attrib**a的属性查询属性Selector

案例:

response.css('img').attrib['src'] 	#获取图片链接

3.将选择器与正则表达式一起使用

Selector还提供了**.re()一种使用正则表达式提取数据的方法。但是,与使用.xpath()**或 **.css()方法不同,它.re()返回字符串列表。因此,您无法构造嵌套.re()**调用。

案例:

response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卑微小钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值