精通scrapy爬虫03使用Selector提取数据

时间:2021-03-09 13:07:42   收藏:0   阅读:0

Selector对象

Selector有四个基本的方法,最常用的还是xpath:

xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表
extract(): 序列化该节点为Unicode字符串并返回list
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表,语法同 BeautifulSoup4
re(): 根据传入的正则表达式对数据进行提取,返回Unicode字符串list列表

进入交互模式了解下基本方法,这里以漫画db为例

Scrapy Shell根据下载的页面会自动创建一些方便使用的对象,例如 Response 对象,以及 Selector 对象 (对HTML及XML内容)。

当shell载入后,将得到一个包含response数据的本地 response 变量,输入 response.body将输出response的包体,输出 response.headers 可以看到response的包头。

输入 response.selector 时, 将获取到一个response 初始化的类 Selector 的对象,此时可以通过使用 response.selector.xpath()或response.selector.css() 来对 response 进行查询。

Scrapy也提供了一些快捷方式, 例如 response.xpath()或response.css()同样可以生效(如之前的案例)。

─$ scrapy shell "https://www.manhuadb.com/"

#返回xpath对象列表
In [4]: response.xpath(‘//h2‘).xpath(‘./text()‘)
Out[4]: 
[<Selector xpath=‘./text()‘ data=‘辉夜姬想让人告白~天才们的恋爱头脑战~‘>,
 <Selector xpath=‘./text()‘ data=‘魔王奶爸(恶魔奶爸)‘>,
 <Selector xpath=‘./text()‘ data=‘ZETMAN 超魔人‘>,
 <Selector xpath=‘./text()‘ data=‘盾之勇者成名录‘>,
 <Selector xpath=‘./text()‘ data=‘东京食尸鬼re(东京喰种re)‘>,
 <Selector xpath=‘./text()‘ data=‘关于我转生变成史莱姆这档事‘>,
 <Selector xpath=‘./text()‘ data=‘辉夜姬想让人告白~天才们的恋爱头脑战~‘>,
 <Selector xpath=‘./text()‘ data=‘魔王奶爸(恶魔奶爸)‘>,
 <Selector xpath=‘./text()‘ data=‘ZETMAN 超魔人‘>,
 <Selector xpath=‘./text()‘ data=‘盾之勇者成名录‘>,
 <Selector xpath=‘./text()‘ data=‘东京食尸鬼re(东京喰种re)‘>,
...
#返回的selector列表
In [5]: s1 = response.xpath(‘//h2‘).xpath(‘./text()‘)

In [6]: s1[1].extract()
Out[6]: ‘魔王奶爸(恶魔奶爸)‘

In [7]: type(s1)
Out[7]: scrapy.selector.unified.SelectorList

In [8]: s1
Out[8]: 
[<Selector xpath=‘./text()‘ data=‘辉夜姬想让人告白~天才们的恋爱头脑战~‘>,
 <Selector xpath=‘./text()‘ data=‘魔王奶爸(恶魔奶爸)‘>,
 <Selector xpath=‘./text()‘ data=‘ZETMAN 超魔人‘>,
 <Selector xpath=‘./text()‘ data=‘盾之勇者成名录‘>,
 <Selector xpath=‘./text()‘ data=‘东京食尸鬼re(东京喰种re)‘>,
 <Selector xpath=‘./text()‘ data=‘关于我转生变成史莱姆这档事‘>,
 <Selector xpath=‘./text()‘ data=‘辉夜姬想让人告白~天才们的恋爱头脑战~‘>,
 <Selector xpath=‘./text()‘ data=‘魔王奶爸(恶魔奶爸)‘>,
 <Selector xpath=‘./text()‘ data=‘ZETMAN 超魔人‘>,
 <Selector xpath=‘./text()‘ data=‘盾之勇者成名录‘>,
 <Selector xpath=‘./text()‘ data=‘东京食尸鬼re(东京喰种re)‘>,
 <Selector xpath=‘./text()‘ data=‘关于我转生变成史莱姆这档事‘>,
 <Selector xpath=‘./text()‘ data=‘漫画‘>,
 <Selector xpath=‘./text()‘ data=‘漫画‘>,
 <Selector xpath=‘./text()‘ data=‘漫画‘>,
...]

css选择器

# 选中所有的img
>>> response.css(‘img‘)
# 选中所有base和title
>>> response.css(‘base,title‘)
# div 后代中的img
>>> response.css(‘div img‘)
# body 子元素中的div
>>> response.css(‘body>div‘)
# 选中包含style属性的元素
>>> response.css(‘[style]‘)
# 选中属性id值为images-1的元素
>>> response.css(‘[id=images-1]‘)
# 选中每个div的第一个a
>>> response.css(‘div>a:nth-child(1)‘)
# 选中第二个div的第一个a
>>> response.css(‘div:nth-child(2)>a:nth-child(1)‘)
response.css(‘a::text‘)

小结

本章学习了从页面中提取数据的相关内容,首先带大家了解了
Scrapy中的Selector对象,然后学习如何使用Selector对象在页面
中选中并提取数据,最后通过一系列例子讲解了XPath和CSS选择器
的用法。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!