一. 基本概念

1. Selector是一个可独立使用的模块,我们可以用Selector类来构建一个选择器对象,然后调用它的相关方法如xpaht(), css()等来提取数据,如下
from  scrapy import Selector
body= '<html><head><title>Hello World</title></head><body></body> </ html> ’
selector = Selector(text=body)
title = selector.xpath('//title/text()').extract_first()
print(title) 输出为
Hello World
 
 
2. scrapy shell 主要用于测试scrapy项目中命令是否生效,可在bash下直接执行,
这里我们通过使用scrapy shell来验证学习选择器提取网页数据,在linux中bash下执行命令
scrapy shell http://doc.scrapy.org/en/latest/_static/selectors-sample1.html即可进入scrapy shell命令模式
上面测试网站源码
<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html>
 

二.  scrapy shell中有内置选择器response.selector,可用于提取网页信息,几个例子如下

1. xpath和css的基本用法

#获取<title>的文本值,其中第一个selector字符可以不写
response.selector.xpath('//title/text()').extract_first()response.selector.css('title::text').extract_first() #获取a标签的href属性值
response.xpath('//a/@href').extract()
response.css('a::attr(href)').extract() #查找属性名称包含image字样的所有a标签
response.xpath('//a[contains(@href, "image")]/@href').extract()
response.css('a[href*=image]::attr(href)').extract() #查找属性名称包含image字样的所有a标签,并且在下级img目录下的src属性值
response.xpath('//a[contains(@href, "image")]/img/@src').extract()
response.css('a[href*=image] img::attr(src)').extract() #结合正则表达式提取所需内容
response.css('a::text').re('Name\:(.*)') #提取(.*)代表的内容
response.css('a::text').re_first('Name\:(.*)').strip() #提取第一个(.*)代表的内容,strip()去除首尾空格

2. xpath和css也可以一起用

#先选上src属性标签
response.xpath('//div[@id="images"]').css('img::attr(src)'))
#提取相应信息
response.xpath('//div[@id="images"]').css('img::attr(src)')).extract() #得到多个字符值
response.xpath('//div[@id="images"]').css('img::attr(src)')).extract_first() #得到一个字符值
response.xpath('//div[@id="images"]').css('img::attr(src)')).extract_first(default='') #如果没提取到返回默认值
注意:
1. extract()方法把selector类型变为数据类型
2. [@id="images"]表示用属性来限制匹配的范围,只查找id属性值等于images的div标签,经测试[]中的id属性值image必须用双引号


scrapy 中用selector来提取数据的用法的更多相关文章

  1. 在scrapy中利用Selector来提取数据

    1.创建对象 Selector类的实现位于scrapy.selector模块,创建Selector对象的时候,可以将页面的Html文档字符串传递给Selector构造器方法 2.选中数据 调用Sele ...

  2. BeautifulSoup4 提取数据爬虫用法详解

    Beautiful Soup 是一个HTML/XML 的解析器,主要用于解析和提取 HTML/XML 数据. 它基于 HTML DOM 的,会载入整个文档,解析整个 DOM树,因此时间和内存开销都会大 ...

  3. scrapy框架Selector提取数据

    从页面中提取数据的核心技术是HTTP文本解析,在python中常用的模块处理: BeautifulSoup  非常流行的解析库,API简单,但解析的速度慢. lxml 是一套使用c语言编写的xml解析 ...

  4. scrapy之使用LinkExtractor提取链接

    一.概述: 在页面含有少量链接时,使用selector来提取信息就可以,但如果链接特别多时,就需要用LinkExtractor来提取. 二.LinkExtractor构造器的各个参数: 1.allow ...

  5. Scrapy 框架(二)数据的持久化

    scrapy数据的持久化(将数据保存到数据库) 一.建立项目 1.scrapy startproject dushu 2.进入项目 cd dushu 执行:scrapy genspider -t cr ...

  6. scrapy中Selector的使用

    scrapy的Selector选择器其实也可以用来解析,今天主要总结下css和xpath的用法,其实我个人最喜欢用css 以慕课网嵩天老师教程中的一个网页为例,python123.io/ws/demo ...

  7. [数据科学] 从csv, xls文件中提取数据

    在python语言中,用丰富的函数库来从文件中提取数据,这篇博客讲解怎么从csv, xls文件中得到想要的数据. 点击下载数据文件http://seanlahman.com/files/databas ...

  8. Python中用format函数格式化字符串的用法

    这篇文章主要介绍了Python中用format函数格式化字符串的用法,格式化字符串是Python学习当中的基础知识,本文主要针对Python2.7.x版本,需要的朋友可以参考下   自python2. ...

  9. mysql 导出表结构和表数据 mysqldump用法

    mysql 导出表结构和表数据 mysqldump用法 命令行下具体用法如下:   mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据mysq ...

随机推荐

  1. 64. Minimum Path Sum (Graph; DP)

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  2. An interview question from MicroStrategy

    去年校招时的一道面试题,觉得蛮有意思,贴出来. Question: Spy start at a, during an interval he moves |b| to right when b &g ...

  3. CentOS7通过 yum安装路径查询方法

    CentOS7通过 yum安装路径查询方法 rpm -qa 然后执行 rpm -ql 软件名称 就可以显示软件的安装路径. 原文博客的链接地址:https://cnblogs.com/qzf/

  4. apicloud 和 微信小程序,你会用哪 个?

    微信 小程序开始火了,app跨平台的革命再次高涨,不得不说,不用再担心android和ios双版本开发成本,及h5的开发 和apicloud一样,不需要关注平台问题,只需要关注前端js.css就能大a ...

  5. CodeForces 513A Game (水题,博弈)

    题意:两个人有n1,n2个球,然后分别最多拿出 k1,k2个球,然后扔掉,谁先拿完谁输. 析:很简单么,每人都足够聪明,就每次扔一个好了,那么,谁的球多,谁就能赢呗,如果相等,那么第一个扔的输. 代码 ...

  6. C语言 void 万能类型

    C中 void类型其实是一种万能类型, 也就是说 我们的 void 可以代表任意一种类型,也就是说他的范围要比具体的一种类型要宽广, 例如: int *p = NULL;void *ptr = p; ...

  7. angularjs之事件绑定、解除事件绑定

    今天在开发时,遇到一个坑,花了一下午时间也没找到原因,无奈小菜鸟只能寻求公司里大牛的帮助,果然,大牛就是大牛,对比了几个输出结果,就看出问题所在.所以小菜鸟当然不会错过这个分享的时机啦~废话不多说进入 ...

  8. 使用VMWare12.0安装Ubuntu系统

    使用VMWare12.0安装Ubuntu系统 Vmware12的虚拟机的文档说明: http://pubs.vmware.com/workstation-12/index.jsp#com.vmware ...

  9. java中创建对象的方法

    有4种显式地创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor ...

  10. Tempdb--Allocation Bottleneck

    Alloctaion bottleneck refers to contention in the system pages that store allocation structures. PFS ...