Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分
Xpath是专门在XML文件中选择节点的语言,也可以用在HTML上。
CSS是一门将HTML文档样式化语言,选择器由它定义,并与特定的HTML元素的样式相关联。

XPath选择器

常用的路径表达式,这里列举了一些常用的,XPath的功能非常强大,内含超过100个的内建函数。
下面为常用的方法

nodeName    选取此节点的所有节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,不考虑它们的位置
. 选择当前节点
.. 选取当前节点的父节点
@ 选取属性
* 匹配任何元素节点
@* 匹配任何属性节点
Node() 匹配任何类型的节点

CSS选择器

CSS层叠样式表,语法由两个主要部分组成:选择器,一条或多条声明
Selector {declaration1;declaration2;……}

下面为常用的使用方法

.class              .color              选择class=”color”的所有元素
#id #info 选择id=”info”的所有元素
* * 选择所有元素
element p 选择所有的p元素
element,element div,p 选择所有div元素和所有p元素
element element div p 选择div标签内部的所有p元素
[attribute] [target] 选择带有targe属性的所有元素
[arrtibute=value] [target=_blank] 选择target=”_blank”的所有元素

选择器的使用例子

上面我们列举了两种选择器的常用方法,下面通过scrapy帮助文档提供的一个地址来做演示
地址:http://doc.scrapy.org/en/latest/_static/selectors-sample1.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' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html>

我们通过下面来演示两种选择器的功能:

scrapy shell http://doc.scrapy.org/en/latest/_static/selectors-sample1.html    来演示两种选择器的功能

获取title

这里的 extract_first()就可以获取 title标签的文本内容,因为我们第一个通过xpath返回的结果是一个列表,所以我们通过 extract()之后返回的也是一个列表,而extract_first()可以直接返回第一个值,extract_first()有一个参数 default,例如:extract_first(default="")表示如果匹配不到返回一个空

In [1]: response.xpath('//title/text()')
Out[1]: [<Selector xpath='//title/text()' data='Example website'>] In [2]: response.xpath('//title/text()').extract_first()
Out[2]: 'Example website' In [6]: response.xpath('//title/text()').extract()
Out[6]: ['Example website']

同样的我们也可以通过css选择器获取,例子如下:

In [7]: response.css('title::text')
Out[7]: [<Selector xpath='descendant-or-self::title/text()' data='Example website'>] In [8]: response.css('title::text').extract_first()
Out[8]: 'Example website'

查找图片信息
这里通过xpath和css结合使用获取图片的src地址:

In [13]: response.xpath('//div[@id="images"]').css('img')
Out[13]:
[<Selector xpath='descendant-or-self::img' data='<img src="data:image1_thumb.jpg">'>,
<Selector xpath='descendant-or-self::img' data='<img src="data:image2_thumb.jpg">'>,
<Selector xpath='descendant-or-self::img' data='<img src="data:image3_thumb.jpg">'>,
<Selector xpath='descendant-or-self::img' data='<img src="data:image4_thumb.jpg">'>,
<Selector xpath='descendant-or-self::img' data='<img src="data:image5_thumb.jpg">'>] In [14]: response.xpath('//div[@id="images"]').css('img::attr(src)').extract()
Out[14]:
['image1_thumb.jpg',
'image2_thumb.jpg',
'image3_thumb.jpg',
'image4_thumb.jpg',
'image5_thumb.jpg']

查找a标签信息
这里分别通过xapth和css选择器获取a标签的href内容,以及文本信息,css获取属性信息是通过attr,xpath是通过@属性名

In [15]: response.xpath('//a/@href')
Out[15]:
[<Selector xpath='//a/@href' data='image1.html'>,
<Selector xpath='//a/@href' data='image2.html'>,
<Selector xpath='//a/@href' data='image3.html'>,
<Selector xpath='//a/@href' data='image4.html'>,
<Selector xpath='//a/@href' data='image5.html'>] In [16]: response.xpath('//a/@href').extract()
Out[16]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [17]: response.css('a::attr(href)')
Out[17]:
[<Selector xpath='descendant-or-self::a/@href' data='image1.html'>,
<Selector xpath='descendant-or-self::a/@href' data='image2.html'>,
<Selector xpath='descendant-or-self::a/@href' data='image3.html'>,
<Selector xpath='descendant-or-self::a/@href' data='image4.html'>,
<Selector xpath='descendant-or-self::a/@href' data='image5.html'>] In [18]: response.css('a::attr(href)').extract()
Out[18]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [27]: response.css('a::text').extract()
Out[27]:
['Name: My image 1 ',
'Name: My image 2 ',
'Name: My image 3 ',
'Name: My image 4 ',
'Name: My image 5 '] In [28]: response.xpath('//a/text()').extract()
Out[28]:
['Name: My image 1 ',
'Name: My image 2 ',
'Name: My image 3 ',
'Name: My image 4 ',
'Name: My image 5 '] In [29]:

高级用法
查找属性名称包含img的所有的超链接,通过contains实现

In [36]: response.xpath('//a[contains(@href,"image")]/@href').extract()
Out[36]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [37]: response.css('a[href*=image]::attr(href)').extract()
Out[37]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [38]:

查找img的src属性

In [41]: response.xpath('//a[contains(@href,"image")]/img/@src').extract()
Out[41]:
['image1_thumb.jpg',
'image2_thumb.jpg',
'image3_thumb.jpg',
'image4_thumb.jpg',
'image5_thumb.jpg'] In [42]: response.css('a[href*=image] img::attr(src)').extract()
Out[42]:
['image1_thumb.jpg',
'image2_thumb.jpg',
'image3_thumb.jpg',
'image4_thumb.jpg',
'image5_thumb.jpg'] In [43]:

提取a标签的文本中name后面的内容,这里提供了正则的方法re和re_first

In [43]: response.css('a::text').re('Name\:(.*)')
Out[43]:
[' My image 1 ',
' My image 2 ',
' My image 3 ',
' My image 4 ',
' My image 5 '] In [44]: response.css('a::text').re_first('Name\:(.*)')
Out[44]: ' My image 1 '

4-----Scrapy框架中选择器的用法的更多相关文章

  1. Scrapy框架中选择器的用法【转】

    Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法 请给作者点赞 --> 原文链接 Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpa ...

  2. scrapy框架中选择器的用法

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

  3. Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法

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

  4. Python之爬虫(十六) Scrapy框架中选择器的用法

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

  5. scrapy框架中Download Middleware用法

    scrapy框架中Download Middleware用法   Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给sp ...

  6. scrapy框架中Item Pipeline用法

    scrapy框架中item pipeline用法 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pyt ...

  7. Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法

    当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为, ...

  8. Python之爬虫(十八) Scrapy框架中Item Pipeline用法

    当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的python类,负责接收到item并通过它执行一些行为, ...

  9. Python爬虫从入门到放弃(十七)之 Scrapy框架中Download Middleware用法

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

随机推荐

  1. javascript 函数,事件

    1.函数字符串函数 var s=new string(); var ss="hello world"; var sss=""HELLO, WORLD" ...

  2. Linux 性能调优

    一.简介 有些时候,我们特别关注程序的性能,特别是底层软件,比如驱动程序,OS等.为了更好的优化程序性能,我们必须找到性能瓶颈点,"好钢用在刀刃上"才能取得好的效果,否则可能白做工 ...

  3. R: 自动计算代码运行时间

    ################################################### 问题:代码运行时间   18.4.25 怎么计算代码的运行时间? 解决方案: ptm = pro ...

  4. java全栈day06---数组的练习 冒泡排序

    水仙花练习功能实现 * A: 水仙花练习功能实现 * a: 题目分析 * 明确什么样的数就是水仙花数.水仙花数是指一个3位数(100-999之间),其每位数字立方之和等于该3位数本身. 如153 = ...

  5. 【转,整理】C# 非托管代码

    .Net Framework 是由彼此独立又相关的两部分组成:CLR 和 类库, CLR是它为我们提供的服务,类库是它实现的功能..NET的大部分特性----垃圾收集,版本控制,线程管理等,都使用了C ...

  6. ubuntu - 安装软件问题

    problem & solution 问题1 - E: 无法定位软件包 @原因(1) - 没有添加相应软件的镜像源(软件源)    解决方案 用 gedit/vi/vim - 在 /etc/a ...

  7. ubuntu - 14.04,常用PPA源(第三方提供的deb格式安装文件)!!

    说明: 1,下面所有PPA源的执行命令,均为在shell中执行的命令,需要依次执行! 2,下面所有测试方法,均为在shell中执行的命令!! PPA源: 一,Oracle JDK:Oracle公司提供 ...

  8. 吴裕雄 python 机器学习——等度量映射Isomap降维模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  9. 【图灵学院10】高并发之java线程池源码分析

    1. 提纲 1)线程池的模块结构 2)示例&原理解析 2. 问题 1)线程池包含哪些东西 2)线程池的运作原理 3)调度线程池的运作原理 4)线程池怎么实现FixRate,FixDelay,他 ...

  10. DOS下修改IP地址

    这两天不知道怎么回事,IPV4竟然无法修改,郁闷之极下,想到用命令行试试. 于是敲入下面的代码: >netsh <Enter> netsh>interface <Ente ...