博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫 --- 2.2 Scrapy 选择器的介绍
阅读量:7128 次
发布时间:2019-06-28

本文共 7070 字,大约阅读时间需要 23 分钟。

原文链接:

在使用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为例子来介绍:

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

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

总结

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


相关文章和视频推荐

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

公开课地址:

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

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

你可能感兴趣的文章
我的友情链接
查看>>
hadoop与spark集成开发环境
查看>>
[置顶] 关于jquery某一元素重复绑定的问题
查看>>
Android Camera2 拍照速度过慢问题
查看>>
摄像头远程监控的Vb.net实现方法(转)
查看>>
ubuntu安装nodejs
查看>>
【Web探索之旅】第一部分:什么是Web?
查看>>
man用来显示中文cman
查看>>
加快app store下载速度【网上看到的】
查看>>
Spring4.1-Application Event
查看>>
Python内置模块(一)
查看>>
利用最新新浪微博API做到桌面程序
查看>>
TRUNC函数的用法
查看>>
gre
查看>>
灵巧还是笨重?利用Textarea从浏览器复制字符到剪贴板
查看>>
CentOS 7.4利用Iptables开启远程访问
查看>>
linux下日志监控分析工具webalizer的安装及使用
查看>>
HTTPS 原理详解
查看>>
[转载] 七龙珠第一部——第073话 必杀恶魔光线
查看>>
Get和Post请求区别
查看>>