原文链接:www.fkomm.cn/article/201…

在使用Scrapy框架之前,我们必须先了解它是如何筛选数据的

Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分, Xpath是专门在XML文件中选择节点的语言,也可以用在HTML上。 CSS是一门将HTML文档样式化的语言,选择器由它定义,并与特定的HTML元素的样式相关联。而且这些选择器构造于‘lxml’之上,这就意味着Scrapy框架下的数据筛选有着很高的效率。

基本选择器:

Scrapy爬虫支持多种信息提取的方法:

  • Beautiful Soup
  • Lxml
  • re
  • XPath Selector
  • CSS Selector

下面我们来介绍Xpath选择器和CSS选择器的使用:

Xpath选择器

  1. 介绍一下XPath:

    XPath 是一门在xml文档中查找信息的语言,它可以在XML文档中对于原色和属性进行遍历。其内置了超过100个内建函数,这些函数用于对字符串值,数值、日期、时间进行比较遍历。总之是一门很方便的语言。

  2. 在网络爬虫中,我们只需要利用XPath来采集数据,所以只要掌握一些基本语法,就可以上手使用了。

    基本使用语法,如下表:

  1. 实例介绍:

下面我们将以这个book.xml为例子来介绍:

<html><body><bookstore><book><title>水浒传</title><author>施耐庵</author><price>58.95</price></book><book><title>西游记</title><author>吴承恩</author><price>58.3</price></book><book><title>三国演义</title><author>罗贯中</author><price>48.3</price></book><book><title>红楼梦</title><author>曹雪芹</author><price>75</price></book></bookstore></body></html>
复制代码
  • 先将我们需要使用的模块导入(调试环境为ipython):
In [1]: from scrapy.selector import SelectorIn [2]: body = open('book.xml','r').read()In [3]: print(body)<html><body><bookstore><book><title>水浒传</title><author>施耐庵</author><price>58.95</price></book><book><title>西游记</title><author>吴承恩</author><price>58.3</price></book><book><title>三国演义</title><author>罗贯中</author><price>48.3</price></book><book><title>红楼梦</title><author>曹雪芹</author><price>75</price></book></bookstore></body></html>In [4]: bodyOut[4]: '<html>\n\t<body>\n\t\t<bookstore>\n\t\t\t<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>西游记</title>\n\t\t\t\t<author>吴承恩</author>\n\t\t\t\t<price>58.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>三国演义</title>\n\t\t\t\t<author>罗贯中</author>\n\t\t\t\t<price>48.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>\n\t\t</bookstore>\n\t</body>\n</html>'In [5]:
复制代码
  • 下面我们来举几个小例子,说明一下如何通过xpath找到我们想要的数据:
In [5]: print("如果我们要第一个book的内容")如果我们要第一个book的内容In [7]: Selector(text=body).xpath('/html/body/bookstore/book[1]').extract()Out[7]: ['<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>']In [8]: print("如果我们要最后一个book的内容")如果我们要最后一个book的内容In [9]: Selector(text=body).xpath('/html/body/bookstore/book[last()]').extract()Out[9]: ['<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>']In [10]: print("如果我们要最后一个book的author属性的文本")如果我们要最后一个book的author属性的文本In [11]: Selector(text=body).xpath('/html/body/bookstore/book[last()]/author/text()').extract()Out[11]: ['曹雪芹']In [12]: print("下面是xpath的嵌套使用")下面是xpath的嵌套使用In [13]: subbody=Selector(text=body).xpath('/html/body/bookstore/book[3]').extract()In [14]: Selector(text=subbody[0]).xpath('//author/text()').extract()Out[14]: ['罗贯中']In [15]: Selector(text=subbody[0]).xpath('//book/author/text()').extract()Out[15]: ['罗贯中']In [16]: Selector(text=subbody[0]).xpath('//book/title/text()').extract()Out[16]: ['三国演义']
复制代码

CSS选择器

  1. 介绍一下CSS:

    和Xpath选择器比起来,感觉CSS选择器容易一些,跟写.css时方法基本一样,就是在获取内容时和Xpath不同,这里需要注意一下。

  2. 基本使用语法,如下表:

  1. 实例介绍:

下面我们还是以这个book.xml为例子来介绍:

  • 上面xpath讲过如何导入模块了,下面我们来举几个小例子,说明一下如何通过css找到我们想要的数据:
In [2]: print("如果我们要所有节点的内容")如果我们所有节点的内容In [3]: Selector(text=body).css('*').extract()Out[3]:['<html>\n\t<body>\n\t\t<bookstore>\n\t\t\t<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>西游记</title>\n\t\t\t\t<author>吴承恩</author>\n\t\t\t\t<price>58.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>三国演义</title>\n\t\t\t\t<author>罗贯中</author>\n\t\t\t\t<price>48.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>\n\t\t</bookstore>\n\t</body>\n</html>','<body>\n\t\t<bookstore>\n\t\t\t<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>西游记</title>\n\t\t\t\t<author>吴承恩</author>\n\t\t\t\t<price>58.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>三国演义</title>\n\t\t\t\t<author>罗贯中</author>\n\t\t\t\t<price>48.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>\n\t\t</bookstore>\n\t</body>','<bookstore>\n\t\t\t<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>西游记</title>\n\t\t\t\t<author>吴承恩</author>\n\t\t\t\t<price>58.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>三国演义</title>\n\t\t\t\t<author>罗贯中</author>\n\t\t\t\t<price>48.3</price>\n\t\t\t</book>\n\t\t\t<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>\n\t\t</bookstore>','<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>','<title>水浒传</title>','<author>施耐庵</author>','<price>58.95</price>','<book>\n\t\t\t\t<title>西游记</title>\n\t\t\t\t<author>吴承恩</author>\n\t\t\t\t<price>58.3</price>\n\t\t\t</book>','<title>西游记</title>','<author>吴承恩</author>','<price>58.3</price>','<book>\n\t\t\t\t<title>三国演义</title>\n\t\t\t\t<author>罗贯中</author>\n\t\t\t\t<price>48.3</price>\n\t\t\t</book>','<title>三国演义</title>','<author>罗贯中</author>','<price>48.3</price>','<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>','<title>红楼梦</title>','<author>曹雪芹</author>','<price>75</price>']In [4]: print("如果我们要bookstore下的所有内容")如果我们要bookstore下的所有内容In [5]: Selector(text=body).css('bookstore book').extract()Out[5]:['<book>\n\t\t\t\t<title>水浒传</title>\n\t\t\t\t<author>施耐庵</author>\n\t\t\t\t<price>58.95</price>\n\t\t\t</book>','<book>\n\t\t\t\t<title>西游记</title>\n\t\t\t\t<author>吴承恩</author>\n\t\t\t\t<price>58.3</price>\n\t\t\t</book>','<book>\n\t\t\t\t<title>三国演义</title>\n\t\t\t\t<author>罗贯中</author>\n\t\t\t\t<price>48.3</price>\n\t\t\t</book>','<book>\n\t\t\t\t<title>红楼梦</title>\n\t\t\t\t<author>曹雪芹</author>\n\t\t\t\t<price>75</price>\n\t\t\t</book>']
复制代码

由于book.xml没有元素,只有节点,所以只能列举以上例子,大家可以看到,css选择器比起xpath选择器更为的简洁。

总结

好了,以上就是对Scrapy 选择器的介绍以及简单的使用,后面我会慢慢介绍Scrapy框架的具体使用。


相关文章和视频推荐

圆方圆学院汇集 Python + AI 名师,打造精品的 Python + AI 技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:ke.qq.com/course/3627…

加入python学习讨论群 78486745 ,获取资料,和广大群友一起学习。

圆方圆python技术讨论群

转载于:https://juejin.im/post/5c1a1aaf5188257dc54ad7f2

Python爬虫 --- 2.2 Scrapy 选择器的介绍相关推荐

  1. Python爬虫扩展库scrapy选择器用法入门(一)

    关于BeutifulSoup4的用法入门请参考Python爬虫扩展库BeautifulSoup4用法精要,scrapy爬虫案例请参考Python使用Scrapy爬虫框架爬取天涯社区小说"大宗 ...

  2. Python爬虫5.3 — scrapy框架spider[Request和Response]模块的使用

    Python爬虫5.3 - scrapy框架spider[Request和Response]模块的使用 综述 Request对象 scrapy.Request()函数讲解: Response对象 发送 ...

  3. python爬虫入门(六) Scrapy框架之原理介绍

    Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...

  4. pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫

    网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...

  5. python爬虫之使用Scrapy框架编写爬虫

    转自:http://www.jb51.net/article/57183.htm 前面的文章我们介绍了Python爬虫框架Scrapy的安装与配置等基本资料,本文我们就来看看如何使用Scrapy框架方 ...

  6. python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码

    今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...

  7. 【python爬虫】在scrapy中利用代理IP(爬取BOSS直聘网)

    同学们好,我又滚回来更新了,这一次我们要爬取的目标是BOSS直聘,BOSS直聘可以说是反爬虫一个很好的例子了,主要在于如果你访问他的次数过多,他就会出现验证码,要求你通过验证才能继续看,这样还算可以, ...

  8. Python爬虫,利用scrapy来编写一个爬虫

    本文将介绍我是如何在python爬虫里面一步一步踩坑,然后慢慢走出来的,期间碰到的所有问题我都会详细说明,让大家以后碰到这些问题时能够快速确定问题的来源,后面的代码只是贴出了核心代码,更详细的代码暂时 ...

  9. python爬虫之路scrapy

    python里面的yield怎么用? yield from是什么意思? scrpay The best way to learn is with examples, and Scrapy is no ...

最新文章

  1. Single Shot Multibox Detection (SSD)实战(下)
  2. ConcurrentHashMap介绍
  3. Fifth Week:Node.js学习
  4. 2018-2019-1 《信息安全系统设计基础》 20165235 实验五 通信协议设计
  5. 第二章《深入C#数据类型》项目经理评分
  6. Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
  7. VOC标签转化为YOLO标签
  8. Bootstrap基本使用
  9. 一个对象对应多个对象如何在一个界面里实现新增_谈MDM主数据管理系统设计和实现关键点...
  10. Word转PDF非常好用的软件——pdfFactory Pro
  11. 苏宁小店助销湘西椪柑 6小时双线销量超60000斤
  12. openwrt MT7620A编译dropbear
  13. Photoshop CS6 Extended 特别版特点介绍
  14. windows GitLab配置ssh秘钥keys
  15. Mac空格键快速预览不能用了怎么办?
  16. 我养的无名花草,四季开花
  17. 激光测距项目整体框图及原理
  18. 技术干货 | 实现模型透明化的有效技术:MindSpore可解释AI能力
  19. 小程序开发系列之基础部分-代码结构
  20. 计算机控制点火系统如何控制点火提前角,电子点火系统如何控制点火提前角?...

热门文章

  1. 对Redis配置中bind的探索
  2. 论PS的功力,英伟达的AI这次谁也不服
  3. 亚洲首个无人船试验基地建于中国珠海,无人船或将助力南海巡逻
  4. 腾讯AI让二子,柯洁还是输了
  5. python中confIgparser模块学习
  6. Linux下Ipython安装
  7. windows server疑难杂症
  8. curl之采集QQ空间留言
  9. SpringFox Swagger2注解基本用法
  10. 企业如何抵御弱云密码带来的威胁