经过“小叮当高级爬虫(一):爬虫利器Scrapy”想必大家都已经了解了Scrapy。
今天,我们来看下“Scrapy shell”命令行模式。
Scrapy shell 简介
Scrapy shell也称"Scrapy终端",是一个交互终端,使我们可以在未启动spider爬虫的情况下尝试及调试代码
更为方便的是,我们也可以直接用来测试XPath或CSS表达式而不用import导入相应模块。通过查看其运行的结果,方便了我们分析目标网页,并从中测试我们的表达式是否提取到了数据
Scrapy内置的Selector选择器
在Scrapy中使用xpath或是CSS等,之所以不用再导入第三方包,是因为在Scrapy中已内置了相应的Selector选择器
Selector有四个基本的方法。
我们先来看看最常用的Xpath方法。
(1)xpath( )
我们通过书写xpath表达式,可使程序返回该表达式所对应的所有节点的selector list选择器列表,从而筛选我们想要定位的元素
(2)extract( )
序列化节点为Unicode字符串并返回list列表
(3)css( )
根据css表达式返回该表达式所对应的所有节点的selector list选择器列表,语法和 BeautifulSoup4相同。
(4)re( )
根据书写的正则表达式,对数据进行提取,返回Unicode字符串list列表
Scrapy shell 实战演练
光说不练,假把式“,下面我们就以”腾讯招聘“网址为例来实战演练一下Scrapy shell的用法。
为便于新手操作,我们在windows7环境下进行操作。打开CMD命令窗口,直接输入命令:
scrapy shell 目标网址
等待系统进入交互模式后,我们使用命令:response (查看目标状态响应状态)
可以看到,我们的目标网址(腾讯招聘官网)的响应状态码为200表示响应成功。此时我们在谷歌浏览器中按下F12,选择左上角的“选择元素箭头”,之后用鼠标选中网页中我们想要爬取的职位信息浏览器的下方便会自动选中对应的网页代码
经过对网页分析后,我们发现数据都在tr标签下的“enven”类和“odd”类的td标签下的a标签中,因此我们就以其中的“even”类为例,书写xpath表达式。在scrapy shell中输入命令:response.xpath('//tr[@class="even"]/td/a/text()')
我们可以看到此时已经可以提取到网页中对应的数据了,我们的xpath表达式测试成功。但我们发现此时提取到的仍是xpath对象,这时我们就可以使用extract()方法来将我们的数据转化为列表。
输入命令:response.xpath('//tr[@class="even"]/td/a/text()').extract()
如果我们只想要提取第一个职位信息,和python中对列表的操作是一样的,我们只需要加个“0下标”即可。
输入命令:response.xpath('//tr[@class="even"]/td/a/text()').extract()[0]
当我们测试xpaht、css等表达式完成后,想要退出scrapy shell 正式编写爬虫时,输入命令:exit() 即可退出scrapy shell 终端模式。
最后我们得出体会scrapy shell和ipython类似,都是即输入即响应的模式。
举报/反馈

IT小叮当

760获赞 276粉丝
专注人工智能、python、深度学习、自然语言
关注
0
0
收藏
分享