课程笔记2:Scrapy框架——Selector(选择器)的用法
Selector是基于lxml来构建的,支持XPath选择器、CSS选择器以及正则表达式。
1.直接使用
from scrapy import Selector
body = '<html><head><title>Hello World</title></head><body></body></html>'
selector = Selector(text=body)
selectorList = selector.xpath('//title/text()')
title = selectorList.extract_first()
print(title)
运行结果:Hello World
这里把Scrapy中的Selector单独拿出来使用了:
首先利用Selector创建了一个选择器对象selector,
然后就可以调用XPath、CSS、正则表达式等方法来定位,
最后再调用get、getall、extract_first、extract等方法来提取。
值得一提的是,在这个示例里面,调用extract_first的对象实际上是一个SelectorList。
对比一下:
print(type(selector))
运行结果:<class 'scrapy.selector.unified.Selector'>
print(type(selectorList))
运行结果:<class 'scrapy.selector.unified.SelectorList'>
补充:四种提取方法的区别
get、getall是新版本的方法,extract_first、extract是旧版本的方法。
前者更好用,提取不到就返回None,后者提取不到就raise一个错误。
对于scrapy.selector.unified.SelectorList对象:
- get拿到的是List里面的第一个string
- getall拿到的是整个List
- extract_first拿到的是List里面的第一个string
- extract拿到的是整个List
(此时,get等同于extract_first,getall等同于extract)
对于scrapy.selector.unified.Selector对象:
- get拿到的是一个string
- getall拿到的是只有一个string的list
- extract_first报错:'Selector' object has no attribute 'extract_first'
- extract拿到的是一个string
(此时,get等同于extract)
总结:想要得到第一个string用get,想要得到全部string用getall。
2.Scrapy shell
在实践中,常常会利用Scrapy shell来模拟Scrapy请求的过程,以确保我们写在项目的代码能有效运行。
进入项目文件夹,在命令行中输入:
scrapy shell http://quotes.toscrape.com/
# 网址需要替换成你要爬取的目标网站
启动信息:
最后会列出一些可操作的变量。
URL查询:
利用XPath选择器进行解析
标签查询:
response.xpath('//div')
标签+属性查询:
response.xpath("//div[@class='quote']")
# class属性
response.xpath("//a[@href='/author/Albert-Einstein']")
# href属性
组合用法1(一步到位):
response.xpath("//div[@class='quote']/span/a")
组合用法2(嵌套查询):
response.xpath("//div[@class='quote']").xpath("./span/a")
以上操作得到的都是SelectorList类型的变量,这个变量是由Selector对象组成的列表。可以用索引单独拿出其中的某个Selector元素。
索引查询:
response.xpath("//div[@class='quote']/span/small/text()")
response.xpath("//div[@class='quote']/span/small/text()")[3]
# 加入索引值
文本获取:
response.xpath("//div[@class='quote']/span/small/text()").get()
response.xpath("//div[@class='quote']/span/small/text()").getall()
# 搭配/text()加上get()或者getall()
属性获取:
response.xpath("//div[@class='quote']/span/a/@href").get()
response.xpath("//div[@class='quote']/span/a/@href").getall()
# 搭配@href加上get()或者getall()
利用CSS选择器进行解析
标签查询:
response.css('a')
标签+属性查询:
response.css('a[href="/author/Albert-Einstein"]')
# href属性
response.css('.tags')
# class属性
组合查询1(一步到位):
response.css('.container .quote .text')
组合查询2(嵌套查询):
response.css('.container').css('.quote').css('.text')
文本获取:
response.css('.container .quote .text::text').getall()
# 搭配::text加上get()或getall()使用
属性获取:
response.css('.quote span a::attr(href)').getall()
# 搭配::attr(属性名)加上get()或getall()使用
xpath和css可以混搭使用:
response.xpath('//div/span').css('.author::text').getall()
利用正则表达式进行解析
(keys:re不可以单独使用,一定先用xpath或者css定位到目标元素)
re用法:
response.css('.author::text').re('(.*?)\s(.*)')
# 查询全部匹配项,并按序输出
re_first用法:
response.css('.author::text').re_first('(.*?)\s(.*)')
# 查询第一个匹配项
更多示例:
response.xpath('.').re('href="(/author.*?)"')
# 用xpath('.')获取整个页面
response.xpath('.').re_first('href="(/author.*?)"')
response.css('html').re('href="(/author.*?)"')
# 用css('html')获取整个页面
response.css('html').re_first('href="(/author.*?)"')
补充:正则表达式基础
目录
目录
1.直接使用
补充:四种提取方法的区别
对于scrapy.selector.unified.SelectorList对象:
对于scrapy.selector.unified.Selector对象:
2.Scrapy shell
URL查询:
利用XPath选择器进行解析
标签查询:
标签+属性查询:
组合用法1(一步到位):
组合用法2(嵌套查询):
索引查询:
文本获取:
属性获取:
利用CSS选择器进行解析
标签查询:
标签+属性查询:
组合查询1(一步到位):
组合查询2(嵌套查询):
文本获取:
属性获取:
xpath和css可以混搭使用:
利用正则表达式进行解析
re用法:
re_first用法:
更多示例:
补充:正则表达式基础
<完>
课程笔记2:Scrapy框架——Selector(选择器)的用法相关推荐
- PYTHON 爬虫笔记十一:Scrapy框架的基本使用
Scrapy框架详解及其基本使用 scrapy框架原理 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中. 其最初是为 ...
- python pipeline框架_Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法...
原博文 2017-07-17 16:39 − 当Item 在Spider中被收集之后,就会被传递到Item Pipeline中进行处理 每个item pipeline组件是实现了简单的方法的pytho ...
- 4-----Scrapy框架中选择器的用法
Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分 Xpath是专门在XML文件中选择节点的语言,也可以用在HT ...
- python中scrapy的middleware是干嘛的_Python之爬虫(十九) Scrapy框架中Download Middleware用法...
这篇文章中写了常用的下载中间件的用法和例子. Downloader Middleware处理的过程主要在调度器发送requests请求的时候以及网页将response结果返回给spiders的时候,所 ...
- python网页爬虫漫画案例_Python爬虫-用Scrapy框架实现漫画的爬取
14.jpg 在之前一篇抓取漫画图片的文章里,通过实现一个简单的Python程序,遍历所有漫画的url,对请求所返回的html源码进行正则表达式分析,来提取到需要的数据. 本篇文章,通过 scrapy ...
- 爬虫学习笔记(七)——Scrapy框架(二):Scrapy shell、选择器
一.Scrapy shell scrapy shell的作用是用于调试,在项目目录下输入scrapy shell start_urls (start_urls:目标url)得到下列信息: scrapy ...
- python爬虫从入门到实战笔记——第四章Scrapy框架
推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...
- Python学习笔记——爬虫之Scrapy框架
目录 Scrapy 框架 Scrapy的安装介绍 Windows 安装方式 Ubuntu 需要9.10或以上版本安装方式 入门案例 启动Scrapy Shell Item Pipeline Spide ...
- Python 网络爬虫笔记9 -- Scrapy爬虫框架
Python 网络爬虫笔记9 – Scrapy爬虫框架 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Py ...
最新文章
- 直击2018AWE:智能语言交互大厮杀、老品牌争先搭建平台、第三方平台迅速崛起
- 打开word文档提示文件未找到_word图片显示:如何打开多图文档不再卡慢
- MySQL自学笔记2--select的5个子句
- 同步、异步;阻塞、非阻塞
- 005_Java操作ZooKeeper
- 云时代架构--阅读笔记03
- .NET的两种部署模式,了解一下
- 一、Java 面向对象高级——Object类、常用API
- wojilu框架代码分析之ActionProcessor.Process()
- itest听力答案2020_itest答案.doc
- NJ法,ML法构建系统发育树~MEGA7.0,iqtree(图文教程)
- scratch——贪吃蛇(变量、克隆、可连手柄)
- 服务器不能用pe安装win7系统安装,使用PE安装win7系统失败了怎么办
- java基础/接口与继承1(0.96万字)
- (远程控制)App inventor 编写安卓app控制 ESP8266
- 关于Hadoop在java客户端进行下载时的异常java.io.FileNotFoundException: Hadoop home directory is no existed的解决办法
- 1月第2周小红书、抖音、B站、淘宝KOL排行榜
- 如何快速学习STAR-CCM+软件解决工程实际问题
- Python3 调用谷歌翻译
- vite+ts+elementplus运行正常打包报错