首页 前端知识 爬虫入门到精通_框架篇18(Scrapy中选择器用法)_sector,xpath,css,re

爬虫入门到精通_框架篇18(Scrapy中选择器用法)_sector,xpath,css,re

2024-06-04 10:06:33 前端知识 前端哥 472 328 我要收藏

官方文档

Using selectors

To explain how to use the selectors we’ll use the Scrapy shell (which provides interactive testing) and an example page located in the Scrapy documentation server:
https://docs.scrapy.org/en/latest/_static/selectors-sample1.html
在这里插入图片描述

<!DOCTYPE html>

<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' alt='image1'/></a>
      <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' alt='image2'/></a>
      <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' alt='image3'/></a>
      <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' alt='image4'/></a>
      <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' alt='image5'/></a>
    </div>
  </body>
</html>

进入命令行交互模式:

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

在这里插入图片描述
输入

response.selector

输出:request内置的selector选择器
在这里插入图片描述

XPath选择器

let’s construct an XPath for selecting the text inside the title tag:

response.xpath("//title/text()")

输出选择器与内容.
在这里插入图片描述

css选择器

response.css("title::text").get()

在这里插入图片描述

xpath和css的运用

xpath查找images标签

response.xpath('//div[@id="images"]')

在这里插入图片描述

response.xpath('//div[@id="images"]').css("img")

在这里插入图片描述
css可以用::attr()获取属性:

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

在这里插入图片描述
default:查不到内容返回default里内容
在这里插入图片描述
href标签:
在这里插入图片描述

contains

找属性名称包含image的所有的超链接可以使用contains选项,第一个参数是属性名,第二个属性是要查找的值

response.xpath('//a[contains(@href,"image")]/@href').extract()

在这里插入图片描述
CSS的写法:

response.css('a[href*=image]::attr(href)').extract()

在这里插入图片描述
假如我们要选择所有a标签里的img里面的src属性,用上contains:

response.xpath('//a[contains(@href,"image")]/img/@src').extract()

在这里插入图片描述
CSS:注意[]之后要有空格

response.css('a[href*=image] img::attr(src)').extract()

在这里插入图片描述

正则表达式

提取内容
在这里插入图片描述
提取冒号后的内容,就需要正则表达式了,注意,\用来对:进行转义。

 response.css('a::text').re('Name\:(.*)')

在这里插入图片描述
与extract()方法类似,re也提供了取得列表中第一个元素的方法:re_first()

response.css('a::text').re_first('Name\:(.*)')

在这里插入图片描述
进一步地,可以使用strip()方法,去掉返回结果中前后的空格:

response.css('a::text').re_first('Name\:(.*)').strip()

在这里插入图片描述

小结

response为我们提供了几个提取方法:

  • xpath
  • CSS
  • re

返回的结果都是Selector类型,可以进行嵌套循环。
a) 对css来说:

  • 获取a标签中的文本内容:response.css(‘a::text’)
  • 获取a标签中的某个属性:response.css(‘a::attr(属性)’)

(b)对xpath来说:

  • 获取a标签中的文本内容:response.xpath(‘//a/text()’)
  • 获取a标签中的某个属性:response.xpath(‘//a/@href’)

两种选择方法,写法不同,效果类似。

要从selector变为数据,则在后面加上.extract() 或 .extract()_first() 或.extract()[x](x为list中元素的下标)。
如果要提取更具体的信息,可以用正则表达式的方法,在后面加上 .re() 或 .re()_first 进行嵌套选择。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/10746.html
标签
爬虫scrapy
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!