# 命令行输入:scrapy shell +链接,会自动请求url,得到的相应默认为response,开启命令行交互模式
scrapy shell http://doc.scrapy.org/en/latest/_static/selectors-sample1.html In [1]: response#response为默认相应
Out[1]: <200 https://doc.scrapy.org/en/latest/_static/selectors-sample1.html> In [2]: response.text#response.text相应的源代码
# 标准结构图如下:
response.text = '''
<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>
'''
# 1:使用选择器response.selector.xpath()/response.selector.css()
In [5]: response.selector.xpath('//title/text()').extract_first()
Out[5]: 'Example website' In [6]: response.selector.css('title::text').extract_first()
Out[6]: 'Example website'
# 2:使用选择器也可以简写为:response.xpath() / response.css() In [9]: response.css('title::text')
Out[9]: [<Selector xpath='descendant-or-self::title/text()' data='Example website'>] In [10]: response.xpath('//title/text()')
Out[10]: [<Selector xpath='//title/text()' data='Example website'>] # 3:以上可知使用.xpath() .css()返回仍然是一个选择器,若要提取里面的数据,可以用extract()提取全部,extract_first提取首个
In [7]: response.xpath('//title/text()').extract_first()
Out[7]: 'Example website' In [8]: response.css('title::text').extract_first()
Out[8]: 'Example website' # 4:可以循环进行选择
# 获取div标签里面,id = 'images'的元素, 然后继续查找img标签属性为src的内容,最终提取出来
# 就是说,包含关系用中括号[],从属关系用斜杠 /
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'] # extract_first还有default属性,如果查找不到对应的元素即返回default指定的值
In [16]: response.xpath("//div[@id='images']").css('img::attr(src)').extract_first(default='')
Out[16]: 'image1_thumb.jpg' # 查找a标签下,属性为href的元素,提取出来
In [18]: response.xpath('//a/@href').extract()
Out[18]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [19]: response.css('a::attr(href)').extract()
Out[19]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] # 5:查找标签的文本
In [20]: response.xpath('//a/text()').extract()
Out[20]:
['Name: My image 1 ',
'Name: My image 2 ',
'Name: My image 3 ',
'Name: My image 4 ',
'Name: My image 5 '] In [21]: response.css('a::text').extract()
Out[21]:
['Name: My image 1 ',
'Name: My image 2 ',
'Name: My image 3 ',
'Name: My image 4 ',
'Name: My image 5 '] # 6:选取标签的属性
In [34]: response.css('a::attr(href)').extract()
Out[34]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [39]: response.xpath('//a/@href').extract()
Out[39]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] # 查找属性名称为href 包含image的标签的属性 In [24]: response.xpath('//a[contains(@href,"image")]/@href').extract()
Out[24]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] In [25]: response.css('a[href*=image]::attr(href)').extract()
Out[25]: ['image1.html', 'image2.html', 'image3.html', 'image4.html', 'image5.html'] # 查找a标签里面属性名为href,包含image,包含img,属性为src的属性
In [27]: response.xpath('//a[contains(@href,"image")]/img/@src').extract()
Out[27]:
['image1_thumb.jpg',
'image2_thumb.jpg',
'image3_thumb.jpg',
'image4_thumb.jpg',
'image5_thumb.jpg'] In [28]: response.css('a[href*=image] img::attr(src)').extract()
Out[28]:
['image1_thumb.jpg',
'image2_thumb.jpg',
'image3_thumb.jpg',
'image4_thumb.jpg',
'image5_thumb.jpg'] # 7:可配合正则表达式,re_first表示取第一个满足正则表达式的
In [30]: response.css('a::text').re('Name\:(.*)')
Out[30]:
[' My image 1 ',
' My image 2 ',
' My image 3 ',
' My image 4 ',
' My image 5 '] In [31]: response.css('a::text').re_first('Name\:(.*)')
Out[31]: ' My image 1 ' In [32]: response.css('a::text').re_first('Name\:(.*)').strip()#去除空格
Out[32]: 'My image 1'

scrapy选择器主要用法的更多相关文章

  1. Scrapy选择器的用法

    1.构造选择器: >>> response = HtmlResponse(url='http://example.com', body=body) >>> Sele ...

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

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

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

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

  4. CSS中:before和:after选择器的用法

    在线演示这次给大家带来的是对话气泡效果,主要是演示了 :before / :after 和 border 的用法,赶快来围观吧. 阅读原文:CSS中:before和:after选择器的用法

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

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

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

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

  7. Scrapy中选择器的用法

    官方文档:https://doc.scrapy.org/en/latest/topics/selectors.html Using selectors Constructing selectors R ...

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

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

  9. scrapy选择器归纳

    python 爬虫: srcrapy框架xpath和css选择器语法 Xpath基本语法 一.常用的路径表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 //div ...

随机推荐

  1. new Date的兼容性问题

    标准浏览器下正常,结果ie.老版本的IOS微信公众号不支持,搞不懂,原来有兼容性问题 //beginData格式为'yyyy-mm-dd' 1 var _date = new Date(Date.pa ...

  2. 兄弟连学Python-3Python变量和数据类型

    变量:变量就是可以改变的量.如:x+y = 10 x=5 , y=? x=7 , y=? 这是数学里的变量 通俗的理解:变量     =   生活中的容器(盒子) 变量的赋值操作  =  我们把物品放 ...

  3. rpm打包工具---FPM

    FPM的安装:fpm是由ruby gem仓库里面安装的所以要先装ruby.yum安装的ruby版本是1.8.7版本,使用gem命令会报错: >= 1.9.3,所以要安装一个比1.9.3版本高的 ...

  4. salesforce lightning零基础学习(一) lightning简单介绍以及org开启lightning

    lightning对于开发salesforce人员来说并不陌生,即使没有做过lightning开发,这个名字肯定也是耳熟能详.原来的博客基本都是基于classic基于配置以及开发,后期博客会以ligh ...

  5. PO BO VO DTO POJO DAO DO

    PO BO DTO VO 归在一起叫是POJO,简单java对象:DAO 是进行数据库增删改查的类,DO不确定有没有. 重点说下POJO PO 持久对象,数据: BO 业务对象,封装对象.复杂对象 , ...

  6. BigDecimal 转成 double

    NUMBER(20,2) 数据库里的字段number  ,实体是BigDecimal 将BigDecimal转成double public double getOrderamount() { if ( ...

  7. 漫谈Java IO之普通IO流与BIO服务器

    今天来复习一下基础IO,也就是最普通的IO. 网络IO的基本知识与概念 普通IO以及BIO服务器 NIO的使用与服务器Hello world Netty的使用与服务器Hello world 输入流与输 ...

  8. java冒泡排序和快速排序

    本ID技术干货公众号"java工会",欢迎关注指正. 一.冒泡排序 1.算法介绍 设排序表长为n,从后向前或者从前向后两两比较相邻元素的值,如果两者的相对次序不对(A[i-1] & ...

  9. 第2次作业:stream案例分析

    摘要:本次随笔是对stream软件进行一次案例分析,以个人观点分析stream为什么成功. 一.介绍产品相关信息 1.我选择的商品是stream 2.选择该产品的主要原因准要是因为自己本身喜欢玩这个平 ...

  10. 阿尔法冲刺——Postmortem会议

    设想与目标 1.我们软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 这个问题,我们觉得我们的软件目标还是比较明确的,在SRS中也给出了典型用户和典型场景的清晰的描述. 2 ...