Selector是基于lxml来构建的,支持XPath选择器、CSS选择器以及正则表达式。

1.直接使用

from scrapy import Selector
​
body = '<html><head><title>Hello World</title></head><body></body></html>'
selector = Selector(text=body)
selectorList = selector.xpath('//title/text()')
title = selectorList.extract_first()
print(title)

运行结果:Hello World

这里把Scrapy中的Selector单独拿出来使用了:

  1. 首先利用Selector创建了一个选择器对象selector,

  2. 然后就可以调用XPath、CSS、正则表达式等方法来定位,

  3. 最后再调用get、getall、extract_first、extract等方法来提取。

值得一提的是,在这个示例里面,调用extract_first的对象实际上是一个SelectorList。

对比一下:

print(type(selector))

运行结果:<class 'scrapy.selector.unified.Selector'>

print(type(selectorList))

运行结果:<class 'scrapy.selector.unified.SelectorList'>

补充:四种提取方法的区别

get、getall是新版本的方法,extract_first、extract是旧版本的方法。

前者更好用,提取不到就返回None,后者提取不到就raise一个错误。

对于scrapy.selector.unified.SelectorList对象:

  • get拿到的是List里面的第一个string
  • getall拿到的是整个List
  • extract_first拿到的是List里面的第一个string
  • extract拿到的是整个List

(此时,get等同于extract_first,getall等同于extract)

对于scrapy.selector.unified.Selector对象:

  • get拿到的是一个string
  • getall拿到的是只有一个string的list
  • extract_first报错:'Selector' object has no attribute 'extract_first'
  • extract拿到的是一个string

(此时,get等同于extract)

 总结:想要得到第一个string用get,想要得到全部string用getall。

2.Scrapy shell

在实践中,常常会利用Scrapy shell来模拟Scrapy请求的过程,以确保我们写在项目的代码能有效运行。

进入项目文件夹,在命令行中输入:

scrapy shell http://quotes.toscrape.com/
# 网址需要替换成你要爬取的目标网站

启动信息:

最后会列出一些可操作的变量。

URL查询:

利用XPath选择器进行解析

标签查询:

response.xpath('//div')

标签+属性查询:

response.xpath("//div[@class='quote']")
# class属性

response.xpath("//a[@href='/author/Albert-Einstein']")
# href属性

组合用法1(一步到位):

response.xpath("//div[@class='quote']/span/a")

组合用法2(嵌套查询):

response.xpath("//div[@class='quote']").xpath("./span/a")

以上操作得到的都是SelectorList类型的变量,这个变量是由Selector对象组成的列表。可以用索引单独拿出其中的某个Selector元素。

索引查询:

response.xpath("//div[@class='quote']/span/small/text()")
response.xpath("//div[@class='quote']/span/small/text()")[3]
# 加入索引值

文本获取:

response.xpath("//div[@class='quote']/span/small/text()").get()
response.xpath("//div[@class='quote']/span/small/text()").getall()
# 搭配/text()加上get()或者getall()

属性获取:

response.xpath("//div[@class='quote']/span/a/@href").get()
response.xpath("//div[@class='quote']/span/a/@href").getall()
# 搭配@href加上get()或者getall()

利用CSS选择器进行解析

标签查询:

response.css('a')

标签+属性查询:

response.css('a[href="/author/Albert-Einstein"]')
# href属性

response.css('.tags')
# class属性

组合查询1(一步到位):

response.css('.container .quote .text')

组合查询2(嵌套查询):

response.css('.container').css('.quote').css('.text')

文本获取:

response.css('.container .quote .text::text').getall()
# 搭配::text加上get()或getall()使用

属性获取:

response.css('.quote span a::attr(href)').getall()
# 搭配::attr(属性名)加上get()或getall()使用

xpath和css可以混搭使用:

response.xpath('//div/span').css('.author::text').getall()

利用正则表达式进行解析

(keys:re不可以单独使用,一定先用xpath或者css定位到目标元素)

re用法:

response.css('.author::text').re('(.*?)\s(.*)')
# 查询全部匹配项,并按序输出

re_first用法:

response.css('.author::text').re_first('(.*?)\s(.*)')
# 查询第一个匹配项

更多示例:

response.xpath('.').re('href="(/author.*?)"')
# 用xpath('.')获取整个页面

response.xpath('.').re_first('href="(/author.*?)"')

response.css('html').re('href="(/author.*?)"')
# 用css('html')获取整个页面

response.css('html').re_first('href="(/author.*?)"')

补充:正则表达式基础


目录

目录

1.直接使用

补充:四种提取方法的区别

对于scrapy.selector.unified.SelectorList对象:

对于scrapy.selector.unified.Selector对象:

2.Scrapy shell

URL查询:

利用XPath选择器进行解析

标签查询:

标签+属性查询:

组合用法1(一步到位):

组合用法2(嵌套查询):

索引查询:

文本获取:

属性获取:

利用CSS选择器进行解析

标签查询:

标签+属性查询:

组合查询1(一步到位):

组合查询2(嵌套查询):

文本获取:

属性获取:

xpath和css可以混搭使用:

利用正则表达式进行解析

re用法:

re_first用法:

更多示例:

补充:正则表达式基础


<完>

课程笔记2:Scrapy框架——Selector(选择器)的用法相关推荐

  1. PYTHON 爬虫笔记十一:Scrapy框架的基本使用

    Scrapy框架详解及其基本使用 scrapy框架原理 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为 ...

  2. python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...

    原博文 2017-07-17 16:39 − 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pytho ...

  3. 4-----Scrapy框架中选择器的用法

    Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分 Xpath是专门在XML文件中选择节点的语言,也可以用在HT ...

  4. python中scrapy的middleware是干嘛的_Python之爬虫(十九) Scrapy框架中Download Middleware用法...

    这篇文章中写了常用的下载中间件的用法和例子. Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所 ...

  5. python网页爬虫漫画案例_Python爬虫-用Scrapy框架实现漫画的爬取

    14.jpg 在之前一篇抓取漫画图片的文章里,通过实现一个简单的Python程序,遍历所有漫画的url,对请求所返回的html源码进行正则表达式分析,来提取到需要的数据. 本篇文章,通过 scrapy ...

  6. 爬虫学习笔记(七)——Scrapy框架(二):Scrapy shell、选择器

    一.Scrapy shell scrapy shell的作用是用于调试,在项目目录下输入scrapy shell start_urls (start_urls:目标url)得到下列信息: scrapy ...

  7. python爬虫从入门到实战笔记——第四章Scrapy框架

    推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...

  8. Python学习笔记——爬虫之Scrapy框架

    目录 Scrapy 框架 Scrapy的安装介绍 Windows 安装方式 Ubuntu 需要9.10或以上版本安装方式 入门案例 启动Scrapy Shell Item Pipeline Spide ...

  9. Python 网络爬虫笔记9 -- Scrapy爬虫框架

    Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...

最新文章

  1. 直击2018AWE:智能语言交互大厮杀、老品牌争先搭建平台、第三方平台迅速崛起
  2. 打开word文档提示文件未找到_word图片显示:如何打开多图文档不再卡慢
  3. MySQL自学笔记2--select的5个子句
  4. 同步、异步;阻塞、非阻塞
  5. 005_Java操作ZooKeeper
  6. 云时代架构--阅读笔记03
  7. .NET的两种部署模式,了解一下
  8. 一、Java 面向对象高级——Object类、常用API
  9. wojilu框架代码分析之ActionProcessor.Process()
  10. itest听力答案2020_itest答案.doc
  11. NJ法,ML法构建系统发育树~MEGA7.0,iqtree(图文教程)
  12. scratch——贪吃蛇(变量、克隆、可连手柄)
  13. 服务器不能用pe安装win7系统安装,使用PE安装win7系统失败了怎么办
  14. java基础/接口与继承1(0.96万字)
  15. (远程控制)App inventor 编写安卓app控制 ESP8266
  16. 关于Hadoop在java客户端进行下载时的异常java.io.FileNotFoundException: Hadoop home directory is no existed的解决办法
  17. 1月第2周小红书、抖音、B站、淘宝KOL排行榜
  18. 如何快速学习STAR-CCM+软件解决工程实际问题
  19. Python3 调用谷歌翻译
  20. vite+ts+elementplus运行正常打包报错

热门文章

  1. 计算机考试要手速,【新生入学秘籍NO.1】亲亲,这里建议您赶紧查收学习秘籍哦!...
  2. 思科模拟器交换机生成树命令解析
  3. java银行安全性_Java使用同步方法解决银行取钱的安全问题案例分析
  4. vc.net matlab,基于ExcelMatlab和VCnet实现立体天线方向图的重构和电平估算_
  5. Mysql存储过程基本语法
  6. 登陆启明星辰天清web网关
  7. iOS应用之微信支付集成
  8. 《项目管理总结报告》编写指南
  9. VCF文件转成Excel
  10. Ubuntu系统的备份与恢复