码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-03-09 13:07:42      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:api   输出   第一个   base   adb   list   unicode   实现   selector   

Selector对象

  • Scrapy综合bs(beautifulSoup)和lxml两者优点实现了Selector类,它是基于lxml库构建的,并简化了API接口。在Scrapy中使用Selector对象提取页面中的数据,使用时先通过XPath或CSS选择器选中页面中要提取的数据,然后进行提取。
  • Selectors选择器
    Scrapy Selectors 内置 XPath 和 CSS 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)‘>,
...
  • 首先来看extract方法,调用Selector对象的extract方法将返回选中内容的Unicode字符串
    与SelectorList对象的xpath和css方法类似,SelectorList对象的extract方法内部会调用其中每个Selector对象的extract方法,并把所有结果收集到一个列表返回给用户:
#返回的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选择器
的用法。

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

标签:api   输出   第一个   base   adb   list   unicode   实现   selector   

原文地址:https://www.cnblogs.com/dglyf/p/14498835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!