scrapy框架Selector提取数据
从页面中提取数据的核心技术是HTTP文本解析,在python中常用的模块处理:
BeautifulSoup 非常流行的解析库,API简单,但解析的速度慢。
lxml 是一套使用c语言编写的xml解析库,解析速度快,API相对比较复杂。
Scrapy中的Selector类是基于lxml库建立的,并且简化了API接口。在使用的过程中先使用xpath或者css选择器选中页面中要提取的数据,然后进行提取。
提取数据
调用Selector或者SelectList对象的以下几种方法可将选中的内容进行提取
extract() 返回选中内容的Unicode字符串。
extract_first() SelectorList专有,返回其中第一个Selector对象调用extract方法。通常SelectorList中只含有一个Selector对象的时候选择调用该方法。
re() 使用正则表达式来提取选中内容中的某部分。
举个例子
selector.xpath('.//b/text()') .extract #[‘价格:99.00元’,‘价格:88.00元’,‘价格:88.00元’]
selector.xpath('.//b/text()').re('\d+\.\d+') #[ '99.00','88.00','88.00']
re_first() 返回SelectorList对象中的第一个Selector对象调用re方法。
selector.xpath('.//b/text()').re_first('\d+\.\d+') # '99.00'
实际的开发过程中,几乎不需要手动创建Selector对象,,Response对象以自身参数自动创建Selector对象
response.xpath('.//h1/text').extract() # [ 'song','shi','chao']
response.css('li::text').extract() # [ 'song','shi','chao']
xpath选择器
xpath即xml路径语言,用来确定xml文档中某个部分的语言,xml文档(html属于xml)是一系列节点构成的树。
基础语法
/ 选中文档的根 描述一个从根开始的绝对路径 ./表示从当前节点选取 (比如提取了一部分,还需要从提取出来里面进行提取就会使用,如果不加 . 会从整个文档中开始提取)
. 选中当前节点 用来描述相对路径
.. 选中当前节点的父节点 用来描述相对路径
ELEMENT 选中子节点中所有的ELEMENT元素节点
//ELEMENT 选中子孙节点中所有的ELEMENT元素节点
* 选中所有元素子节点
text() 选中所有文本子节点
@ATTR 选中名为ATTR的属性节点
@* 选中所有的属性节点
[谓语] 谓语用来查找某个特定的节点或者包含某个特定值的节点
举例
response.xpath('/html/body/div') #选取body下的所有div
response.xpath('//a') #选中文档所有a
response.xpath('/html/body//div') #选中body下的所有节点中的div,无论在什么位置
response.xpath('//a/text()') #选取所有a的文本
response.xpath('/html/div/*') #选取div的所有元素子节点
response.xpath('//div/*/img') #选取div孙节点的所有img
response.xpath('//img/@src') #选取所有img的src属性
response.xpath('//a[1]/img/@*') #选取第一个a下img的所有属性
response.xpath('//a[2]') #所有a中的第2个
response.xpath('//a[last()]') #所有a中的最后一个 ('/a[last()-1]')#倒第二个 ('//a[position()<=3]')#使用position函数选中前三个 ('//div[@id]')#选中所有含有id属性的div ('//div[@id="song"]')#选中所有id属性为song的div
response.xpath('//p[contains(@class,'song')]') #选择class属性中含有‘song’的p元素
response.xpath('//div/a | //div/p') 或者,页面中可能是a可能是p
css选择器
css即层叠样式表,选择器不如xpath强大,原理就是选择的时候翻译成xpath表达式在调用xpath方法。
* 选择所有节点
#container 选择id为container的节点
.container 选择class包含container的节点
li a 选择 所有 li 下的所有 a 节点
ul + p 选择所有ul后面的第一个p元素
#container > ul 选择id为container的第一个ul节点
a[class] 选取所有有class属性的a元素
a[href="http://b.com"] 含有href="http://b.com"的a元素
a[href*='job'] 包含job的a元素
a[href^='https'] 开头是https的a元素
a[href$='cn'] 结尾是cn的a元素
response.css('div a::text').extract() 所有div下所有a的文本
response.css('div a::attr(href)').extract() href的值
response.css('div>a:nth-child(1)') 选中每个div的第一个a > 会设定只在子节点中找,不会到孙节点中
response.css('div:not(#container)') 选取所有id不是container的div
response.css('div:first-child>a:last-child') 第一个div中最后一个a
转载于:https://www.cnblogs.com/master-song/p/8948210.html
scrapy框架Selector提取数据相关推荐
- Selector提取数据1:XPath选择器
1.XPath是什么? XPath即XML路径语言(XML Path Language),它是一种用来确定xml文档中某部分位置的语言.XPath本身遵循w3c标准. xml文档(html属于xml) ...
- Scrapy框架爬取数据
因为对爬虫有着很大的好奇心,所以又找了一些资料继续开始了学习之旅. 文章目录 一.Scrapy框架简介 二.爬取网络数据 2.1爬取单个网页数据 2.2爬取多个网页数据 三.一些小方法 四.小结 一. ...
- scrapy框架对接seleniumpipeline数据持久化
文章目录 1.**scrapy对接selenium** 2.pipeline数据持久化 1.scrapy对接selenium 动态数据加载: 1.ajax: ①url接口存在规律, 可以自行构建url ...
- 课程笔记2:Scrapy框架——Selector(选择器)的用法
Selector是基于lxml来构建的,支持XPath选择器.CSS选择器以及正则表达式. 1.直接使用 from scrapy import Selector body = '<html ...
- Python3网络爬虫之Scrapy框架实现招聘数据抓取
项目需求: 某招聘网上面有公司发布的的各种工作岗位,进入首页 https://careers.tencent.com/ 后可见 到一个搜索框,如下图所示: 在搜索框输入岗位名称,跳转到如下图所示页面, ...
- python爬虫十二:初步使用Scrapy框架爬取数据
1.通过pipelines操作拿到的数据 要点一:爬虫文件必须通过关键字yield生成器才能与pipelines建立链接才可以操作,当运行爬虫文件之后执行的顺序如下图简介,如果重写模块或者内部方法可能 ...
- scrapy框架之全站数据的爬取
全站数据的爬取有俩种方式: 1.基于spider的全站数据爬取:需要自己进行分页操作,并进行手动发送请求 2.基于CrawlSpider ,今天主要讲解基于CrawlSpider 的爬取方式 Craw ...
- python爬虫库scrapy_使用Python爬虫Scrapy框架爬取数据
时隔数月,国庆期间想做个假期旅游的分析展示. 1.通过Python爬取旅游网站上数据,并存储到数据库 2.通过Echart/FineReport/Superset等数据分析工具对数据展示 环境: Wi ...
- 【python爬虫】scrapy框架案例实现数据保存入MySQL
文章目录
- Scrapy是什么?Scrapy怎么用?Scrapy进阶使用[链接提取器、自动登录、图片(文件)下载器](基于scrapy2.0+编写) ๑乛◡乛๑ Scrapy框架使用方法
文章目录 Scrapy框架 链接提取器(LinkExtractors) Rule与LinkExtractor 实战演示 自动登录 旧方法-携带cookie登录和模拟提交登录表单 新方法-自动登录 图片 ...
最新文章
- npm ERR! missing script: dev 解决方案
- mysql int(3)与int(11)的区别
- 【今日直播】致前端:不要再打了.gif
- CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)
- 修改用户名后TSF出现需要本地工作区。工作区 xxx 并未驻留在本计算机上
- xfce4的主题PenOSmaster使用xfce4-screenshooter截屏会全屏幕都是紫色的问题-解决方案
- 什么是真正的程序员?
- linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
- DISCUZ学习笔记01---discuz集成环境的搭建
- 概率论与数理统计浙大第五版 第三章 部分习题
- android 圆形进度条样式,Android编程之ProgressBar圆形进度条颜色设置方法
- word文字上下间距怎么调_word上下文字间距 word字体上下间距怎么调整
- c语言编程输出等腰三角形,C语言输出等腰三角形
- QWERT切换到DVORAK
- 三维激光扫描后处理软件_地面三维激光扫描仪应用之一|云尚智造
- node-red实现MQTT通讯
- 代码设置margintop_js获取css属性,更改margin-top属性,给每个a标签的margin-top属性在原基础上 +5px...
- 克里斯蒂安贝尔_克里斯蒂安贝尔解释为何只演3次蝙蝠侠
- AD16PCB布线规则
- linux 临时文件夹设置,Linux 系统 tmp 目录的安全设置