从页面中提取数据的核心技术是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

scrapy框架Selector提取数据的更多相关文章

  1. Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)

    1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...

  2. Scrapy 框架 CrawlSpider 全站数据爬取

    CrawlSpider 全站数据爬取 创建 crawlSpider 爬虫文件 scrapy genspider -t crawl chouti www.xxx.com import scrapy fr ...

  3. 提升Scrapy框架爬取数据效率的五种方式

    1.增加并发线程开启数量 settings配置文件中,修改CONCURRENT_REQUESTS = 100,默认为32,可适当增加: 2.降低日志级别 运行scrapy时会产生大量日志占用CPU,为 ...

  4. 爬虫必知必会(6)_提升scrapy框架爬取数据的效率之配置篇

    如何提升scrapy爬取数据的效率:只需要将如下五个步骤配置在配置文件中即可 增加并发:默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_ ...

  5. Scrapy框架之基于RedisSpider实现的分布式爬虫

    需求:爬取的是基于文字的网易新闻数据(国内.国际.军事.航空). 基于Scrapy框架代码实现数据爬取后,再将当前项目修改为基于RedisSpider的分布式爬虫形式. 一.基于Scrapy框架数据爬 ...

  6. scrapy 中用selector来提取数据的用法

      一. 基本概念 1. Selector是一个可独立使用的模块,我们可以用Selector类来构建一个选择器对象,然后调用它的相关方法如xpaht(), css()等来提取数据,如下 from sc ...

  7. 爬虫(十五):Scrapy框架(二) Selector、Spider、Downloader Middleware

    1. Scrapy框架 1.1 Selector的用法 我们之前介绍了利用Beautiful Soup.正则表达式来提取网页数据,这确实非常方便.而Scrapy还提供了自己的数据提取方法,即Selec ...

  8. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  9. scrapy框架基于CrawlSpider的全站数据爬取

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

随机推荐

  1. Yolov3参数解释以及答疑

    目录 参数解析 训练答疑 ​ 参数解析 [net] #Testing #batch=1 //test:一次一个图片 #subdivisions=1 #Training batch=32 //一次迭代送 ...

  2. ppt字体

    字体也需要设计.  太大众不太好.   ppt自带的字体样式 有毛笔风格的.vrinda. 其他的和这个字体样式差不多.选其中一个就可以了. 其他的个性样式就需要下载字体扩展了.作为经常做ppt的,还 ...

  3. SpringMVC框架简介

    1.简介 SpringMVC也叫Spring Web  mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 01.Spring mvc的优缺点 M ...

  4. Ural2110 : Remove or Maximize

    设最大的数为$w$,若$n>k+\log w$,那么显然所有$1$都可以保留,否则现在$n\leq k+\log w$. 如果$w\leq 100000$,那么可以DP,设$f[i][j]$表示 ...

  5. GDOI2017爆炸记

    100种方法教你爆零.. 总结 其实这一次比赛除了三个sb的错误还是收获到了很多的.. 起码自己已经知道自己有进队的实力 不足的地方很大 主要是脑子不太好使,题目要不只能拿最暴力的分要不就能a 看了很 ...

  6. 最全,可直接用的一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等。

    一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等. // 判断邮箱 isValid = [text isValidEmail]; // 判断手机 ...

  7. Java 多线程 高可用原则

    高可用原则 1 降级 降级开关的设计思路如下: 1. 集中管理开关:把开关推送到各个应用. 2. 可降级的多级读服务:比如服务调用降级为只读本地缓存.只读分布式缓存.只读默认降级数据(如库存状态默认有 ...

  8. python安装虚拟环境virtualenv

    虚拟环境 虚拟环境是一个将不同项目所需求的依赖分别放在独立的地方的一个工具,它给这些工程创建虚拟的Python环境.它解决了“项目X依赖于版本1.x,而项目Y需要项目4.x”的两难问题,而且使你的全局 ...

  9. Sklearn线性回归

    Sklearn线性回归 原理 线性回归是最为简单而经典的回归模型,用了最小二乘法的思想,用一个n-1维的超平面拟合n维数据 数学形式 \[y(w,x)=w_0+w_1x_1+w_2x_2+-+w_nx ...

  10. JS_高程4.变量,作用域和内存问题(3)垃圾收集

    JavaScript的自动垃圾收集机制 执行环境会负责管理代码执行过程中使用的内存,编写JavaScript程序时,所需内存的分配以及无用内存的回收完全实现自动管理. 原理: 找出那些不再继续使用的变 ...