从页面中提取数据的核心技术是HTTP文本解析,在python中常用的模块处理:

  BeautifulSoup  非常流行的解析库,API简单,但解析的速度慢。

  lxml 是一套使用c语言编写的xml解析库,解析速度快,API相对比较复杂。

Scrapy中的Selector类是基于lxml库建立的,并且简化了API接口。在使用的过程中先使用xpath或者css选择器选中页面中要提取的数据,然后进行提取。

提取数据

调用Selector或者SelectList对象的以下几种方法可将选中的内容进行提取

  extract()   返回选中内容的Unicode字符串。

  extract_first()   SelectorList专有,返回其中第一个Selector对象调用extract方法。通常SelectorList中只含有一个Selector对象的时候选择调用该方法。

  re()    使用正则表达式来提取选中内容中的某部分。

    举个例子

      selector.xpath('.//b/text()') .extract           #[‘价格:99.00元’,‘价格:88.00元’,‘价格:88.00元’]

      selector.xpath('.//b/text()').re('\d+\.\d+')       #[ '99.00','88.00','88.00']

  re_first()   返回SelectorList对象中的第一个Selector对象调用re方法。

      selector.xpath('.//b/text()').re_first('\d+\.\d+')   # '99.00'

实际的开发过程中,几乎不需要手动创建Selector对象,,Response对象以自身参数自动创建Selector对象

       response.xpath('.//h1/text').extract()        # [ 'song','shi','chao']

       response.css('li::text').extract()                # [ 'song','shi','chao']

xpath选择器

  xpath即xml路径语言,用来确定xml文档中某个部分的语言,xml文档(html属于xml)是一系列节点构成的树。

基础语法

    选中文档的根   描述一个从根开始的绝对路径   ./表示从当前节点选取 (比如提取了一部分,还需要从提取出来里面进行提取就会使用,如果不加 会从整个文档中开始提取)

.      选中当前节点    用来描述相对路径

..     选中当前节点的父节点  用来描述相对路径

ELEMENT    选中子节点中所有的ELEMENT元素节点

//ELEMENT   选中子孙节点中所有的ELEMENT元素节点

     选中所有元素子节点

text()   选中所有文本子节点

@ATTR  选中名为ATTR的属性节点

@*  选中所有的属性节点

[谓语]  谓语用来查找某个特定的节点或者包含某个特定值的节点

举例

  response.xpath('/html/body/div') #选取body下的所有div

  response.xpath('//a')  #选中文档所有a

  response.xpath('/html/body//div') #选中body下的所有节点中的div,无论在什么位置

  response.xpath('//a/text()') #选取所有a的文本

  response.xpath('/html/div/*') #选取div的所有元素子节点

  response.xpath('//div/*/img') #选取div孙节点的所有img

  response.xpath('//img/@src') #选取所有img的src属性

  response.xpath('//a[1]/img/@*') #选取第一个a下img的所有属性

  response.xpath('//a[2]') #所有a中的第2个

  response.xpath('//a[last()]') #所有a中的最后一个  ('/a[last()-1]')#倒第二个   ('//a[position()<=3]')#使用position函数选中前三个 ('//div[@id]')#选中所有含有id属性的div  ('//div[@id="song"]')#选中所有id属性为song的div

  response.xpath('//p[contains(@class,'song')]') #选择class属性中含有‘song’的p元素

  response.xpath('//div/a | //div/p') 或者,页面中可能是a可能是p

css选择器

  css即层叠样式表,选择器不如xpath强大,原理就是选择的时候翻译成xpath表达式在调用xpath方法。

*        选择所有节点

#container         选择id为container的节点

.container          选择class包含container的节点

 li a    选择 所有 li 下的所有 a 节点

ul + p  选择所有ul后面的第一个p元素

#container > ul    选择id为container的第一个ul节点

a[class]   选取所有有class属性的a元素

a[href="http://b.com"]   含有href="http://b.com"的a元素

a[href*='job']   包含job的a元素

a[href^='https']  开头是https的a元素

a[href$='cn']   结尾是cn的a元素

response.css('div a::text').extract()   所有div下所有a的文本

response.css('div a::attr(href)').extract()          href的值

response.css('div>a:nth-child(1)')  选中每个div的第一个a      > 会设定只在子节点中找,不会到孙节点中

response.css('div:not(#container)')  选取所有id不是container的div

response.css('div:first-child>a:last-child')  第一个div中最后一个a

转载于:https://www.cnblogs.com/master-song/p/8948210.html

scrapy框架Selector提取数据相关推荐

  1. Selector提取数据1:XPath选择器

    1.XPath是什么? XPath即XML路径语言(XML Path Language),它是一种用来确定xml文档中某部分位置的语言.XPath本身遵循w3c标准. xml文档(html属于xml) ...

  2. Scrapy框架爬取数据

    因为对爬虫有着很大的好奇心,所以又找了一些资料继续开始了学习之旅. 文章目录 一.Scrapy框架简介 二.爬取网络数据 2.1爬取单个网页数据 2.2爬取多个网页数据 三.一些小方法 四.小结 一. ...

  3. scrapy框架对接seleniumpipeline数据持久化

    文章目录 1.**scrapy对接selenium** 2.pipeline数据持久化 1.scrapy对接selenium 动态数据加载: 1.ajax: ①url接口存在规律, 可以自行构建url ...

  4. 课程笔记2:Scrapy框架——Selector(选择器)的用法

     Selector是基于lxml来构建的,支持XPath选择器.CSS选择器以及正则表达式. 1.直接使用 from scrapy import Selector ​ body = '<html ...

  5. Python3网络爬虫之Scrapy框架实现招聘数据抓取

    项目需求: 某招聘网上面有公司发布的的各种工作岗位,进入首页 https://careers.tencent.com/ 后可见 到一个搜索框,如下图所示: 在搜索框输入岗位名称,跳转到如下图所示页面, ...

  6. python爬虫十二:初步使用Scrapy框架爬取数据

    1.通过pipelines操作拿到的数据 要点一:爬虫文件必须通过关键字yield生成器才能与pipelines建立链接才可以操作,当运行爬虫文件之后执行的顺序如下图简介,如果重写模块或者内部方法可能 ...

  7. scrapy框架之全站数据的爬取

    全站数据的爬取有俩种方式: 1.基于spider的全站数据爬取:需要自己进行分页操作,并进行手动发送请求 2.基于CrawlSpider ,今天主要讲解基于CrawlSpider 的爬取方式 Craw ...

  8. python爬虫库scrapy_使用Python爬虫Scrapy框架爬取数据

    时隔数月,国庆期间想做个假期旅游的分析展示. 1.通过Python爬取旅游网站上数据,并存储到数据库 2.通过Echart/FineReport/Superset等数据分析工具对数据展示 环境: Wi ...

  9. 【python爬虫】scrapy框架案例实现数据保存入MySQL

    文章目录

  10. Scrapy是什么?Scrapy怎么用?Scrapy进阶使用[链接提取器、自动登录、图片(文件)下载器](基于scrapy2.0+编写) ๑乛◡乛๑ Scrapy框架使用方法

    文章目录 Scrapy框架 链接提取器(LinkExtractors) Rule与LinkExtractor 实战演示 自动登录 旧方法-携带cookie登录和模拟提交登录表单 新方法-自动登录 图片 ...

最新文章

  1. npm ERR! missing script: dev 解决方案
  2. mysql int(3)与int(11)的区别
  3. 【今日直播】致前端:不要再打了.gif
  4. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)
  5. 修改用户名后TSF出现需要本地工作区。工作区 xxx 并未驻留在本计算机上
  6. xfce4的主题PenOSmaster使用xfce4-screenshooter截屏会全屏幕都是紫色的问题-解决方案
  7. 什么是真正的程序员?
  8. linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
  9. DISCUZ学习笔记01---discuz集成环境的搭建
  10. 概率论与数理统计浙大第五版 第三章 部分习题
  11. android 圆形进度条样式,Android编程之ProgressBar圆形进度条颜色设置方法
  12. word文字上下间距怎么调_word上下文字间距 word字体上下间距怎么调整
  13. c语言编程输出等腰三角形,C语言输出等腰三角形
  14. QWERT切换到DVORAK
  15. 三维激光扫描后处理软件_地面三维激光扫描仪应用之一|云尚智造
  16. node-red实现MQTT通讯
  17. 代码设置margintop_js获取css属性,更改margin-top属性,给每个a标签的margin-top属性在原基础上 +5px...
  18. 克里斯蒂安贝尔_克里斯蒂安贝尔解释为何只演3次蝙蝠侠
  19. AD16PCB布线规则
  20. linux 临时文件夹设置,Linux 系统 tmp 目录的安全设置

热门文章

  1. oracle对用户的管理
  2. struct深层解析
  3. js获取数组中的最大值和最小值的方法汇总
  4. java操作ElasticSearch(包含增删改查及基础语法操作)
  5. LRU原理和Redis实现
  6. C++ 虚函数表详解
  7. 乔安监控电脑客户端_公司上网监控使用安装电脑监控软件?
  8. redis中集群的故障恢复
  9. php form表单提交代码,PHP之表单的提交
  10. vscode写c++好吗_寒假实习简历你会写吗?四个问题帮你写好寒假实习简历