Python爬虫 --- 2.2 Scrapy 选择器的介绍
原文链接: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选择器
介绍一下XPath:
XPath 是一门在xml文档中查找信息的语言,它可以在XML文档中对于原色和属性进行遍历。其内置了超过100个内建函数,这些函数用于对字符串值,数值、日期、时间进行比较遍历。总之是一门很方便的语言。
在网络爬虫中,我们只需要利用XPath来采集数据,所以只要掌握一些基本语法,就可以上手使用了。
基本使用语法,如下表:
- 实例介绍:
下面我们将以这个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选择器
介绍一下CSS:
和Xpath选择器比起来,感觉CSS选择器容易一些,跟写.css时方法基本一样,就是在获取内容时和Xpath不同,这里需要注意一下。
基本使用语法,如下表:
- 实例介绍:
下面我们还是以这个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 ,获取资料,和广大群友一起学习。
转载于:https://juejin.im/post/5c1a1aaf5188257dc54ad7f2
Python爬虫 --- 2.2 Scrapy 选择器的介绍相关推荐
- Python爬虫扩展库scrapy选择器用法入门(一)
关于BeutifulSoup4的用法入门请参考Python爬虫扩展库BeautifulSoup4用法精要,scrapy爬虫案例请参考Python使用Scrapy爬虫框架爬取天涯社区小说"大宗 ...
- Python爬虫5.3 — scrapy框架spider[Request和Response]模块的使用
Python爬虫5.3 - scrapy框架spider[Request和Response]模块的使用 综述 Request对象 scrapy.Request()函数讲解: Response对象 发送 ...
- python爬虫入门(六) Scrapy框架之原理介绍
Scrapy框架 Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬 ...
- pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫
网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...
- python爬虫之使用Scrapy框架编写爬虫
转自:http://www.jb51.net/article/57183.htm 前面的文章我们介绍了Python爬虫框架Scrapy的安装与配置等基本资料,本文我们就来看看如何使用Scrapy框架方 ...
- python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码
今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...
- 【python爬虫】在scrapy中利用代理IP(爬取BOSS直聘网)
同学们好,我又滚回来更新了,这一次我们要爬取的目标是BOSS直聘,BOSS直聘可以说是反爬虫一个很好的例子了,主要在于如果你访问他的次数过多,他就会出现验证码,要求你通过验证才能继续看,这样还算可以, ...
- Python爬虫,利用scrapy来编写一个爬虫
本文将介绍我是如何在python爬虫里面一步一步踩坑,然后慢慢走出来的,期间碰到的所有问题我都会详细说明,让大家以后碰到这些问题时能够快速确定问题的来源,后面的代码只是贴出了核心代码,更详细的代码暂时 ...
- python爬虫之路scrapy
python里面的yield怎么用? yield from是什么意思? scrpay The best way to learn is with examples, and Scrapy is no ...
最新文章
- Single Shot Multibox Detection (SSD)实战(下)
- ConcurrentHashMap介绍
- Fifth Week:Node.js学习
- 2018-2019-1 《信息安全系统设计基础》 20165235 实验五 通信协议设计
- 第二章《深入C#数据类型》项目经理评分
- Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
- VOC标签转化为YOLO标签
- Bootstrap基本使用
- 一个对象对应多个对象如何在一个界面里实现新增_谈MDM主数据管理系统设计和实现关键点...
- Word转PDF非常好用的软件——pdfFactory Pro
- 苏宁小店助销湘西椪柑 6小时双线销量超60000斤
- openwrt MT7620A编译dropbear
- Photoshop CS6 Extended 特别版特点介绍
- windows GitLab配置ssh秘钥keys
- Mac空格键快速预览不能用了怎么办?
- 我养的无名花草,四季开花
- 激光测距项目整体框图及原理
- 技术干货 | 实现模型透明化的有效技术:MindSpore可解释AI能力
- 小程序开发系列之基础部分-代码结构
- 计算机控制点火系统如何控制点火提前角,电子点火系统如何控制点火提前角?...