Python爬虫-Scrapy框架(二)- 交互式命令模式
写在前面
在交互式命令模式这一部分主要介绍了对Scrapy的爬取功能进行测试,以及一些简单命令的使用,包括如何创建一个Scrapy项目。在这一篇文章中主要是介绍一些基本命令的使用,在代码方面讲解较少,重点还是放在后面的章节。
交互式命令模式
使用shell命令
我们可以进入Scrapy交互式命令模式对要爬取的页面进行测试,查看获取到的内容。我们在命令行程序中使用命令 scrapy shell https://blog.csdn.net/sunzhihao_future 来进入交互模式,即 scrapy shell后面追加要爬取的网址 。
成功打开后,会进入下图所示的交互命令模式。类似于python,可以直接输入要执行的命令。
在上述shell命令执行的过程中,打开了指示的链接,将爬取的内容保存到了response变量。可以通过命令 response 来查看保存的变量。
通过命令 view(response) 来查看获取到的具体的数据,即response中的内容。
终端在收到view(response)命令后,会调用系统默认的浏览器显示爬取到的数据,如下图所示。
查看地址栏不难发现,新打开的页面是一个存储在本地的临时文件,与原网页进行对比,内容大致相同。
XPath Helper插件安装与使用
XPath即XML路径语言(XML Path Language),是一种用来确定XML文档中某部分位置的语言。之前利用Firefox浏览器中的FireBug开发者插件可以很方便的获取某个元素的路径,但是很遗憾,在2017年底,FireBug制作团队宣布停止继续维护,因此在最新版的Firefox浏览器中已经找不到这一款扩展程序了。
XPath Helper安装
XPath Helper是Chrome浏览器的扩展程序,提供了类似于FireBug的获取元素路径的功能,和FireBug相比,存在一些不足,但是对于初学者来说,可以暂时用来获取HTML元素的XPath路径。
由于不能很方便的直接访问Google服务器,因此我们可以提前下载XPath Helper离线安装文件,然后打开Chrome浏览器的扩展程序管理页面,将下载好的离线安装文件拖入即可安装。
这里考虑到版权问题,没有直接给出链接,如果没有找到离线安装文件,可以直接评论留言或者发送电邮至 [email protected] ,可以直接分享一下。
XPath Helper使用
在启用了XPath Helper后,我们可以通过Ctrl + Shift + X来打开XPath Helper的操作页面。
如果想要获取某个HTML元素的XPath路径,可以通过Ctrl + Shift然后同时鼠标移动到想要获取路径的元素上。
这样就可以获取到元素 “41” 对应的路径,在QUERY中显示,同时在RESULT中可以看到该路径指向的元素,在这里我们获取到的元素路径如下:
#XPath
/html/body[@class='nodata ']/div[@id='mainBox']/main/div[@class='article-list']
/div[@class='article-item-box csdn-tracking-statistics'][2]
/div[@class='info-box d-flex align-content-center']
/p[3]/span[@class='read-num']/span[@class='num']
获取特定数据
在获取了某个元素的XPath路径后,回到命令行程序,可以利用命令 response.xpath("…").extract() 来查看通过这个路径找到的元素。
这是一个固定的语法,response会利用指定的XPath进行进一步解析,返回一个列表元素。
在这里我们得到了一个span,其类名是num的41。如何舍弃掉其他信息,只取得41呢?
同样利用上述语法,在特定元素路径后追加/text(),即 response.xpath("…/text()").extract() 。
以上已经成功获取了某一个特定元素,如何同时获取一类元素呢?以页面中出现的所有文章的浏览量为例。
打开浏览器的开发者模式或者观察同类元素的XPath路径,不难发现,浏览数量都在类名为article-item-box csdn-tracking-statistics的这一div标签下,下标不同,因此尝试删除下标,发现通过该路径可以成功获取到页面中出现的所有文章的浏览量。
#XPath
/html/body[@class='nodata ']/div[@id='mainBox']/main/div[@class='article-list']
/div[@class='article-item-box csdn-tracking-statistics']#删除[2]
/div[@class='info-box d-flex align-content-center']
/p[3]/span[@class='read-num']/span[@class='num']
回到命令行程序,同样使用上面提到的语法,成功获取到了这一类元素。
创建Scrapy项目
在命令行程序中通过命令 scrapy startproject csdn_sun 来创建一个名称为csdn_sun的Scrapy项目。将创建好的项目(文件夹)用PyCharm打开,观察文件目录。这样我们创建好了一个新的Scrapy项目。
在spiders目录下新建Python File,作为爬虫文件。
在刚刚新建的爬虫文件中添加下述代码:
import scrapy
class BlogSpider(scrapy.Spider):
name = "blog"
start_urls = ['https://blog.csdn.net/sunzhihao_future']
def parse(self, response):
print(response)
num_list = response.xpath("/html/body[@class='nodata ']/div[@id='mainBox']/main"
"/div[@class='article-list']/div[@class='article-item-box csdn-tracking-statistics']"
"/div[@class='info-box d-flex align-content-center']/p[3]"
"/span[@class='read-num']/span[@class='num']/text()").extract()
for i in title_list:
print(i)
打开PyCharm中的Terminal终端,通过命令 scrapy list 来查看当前项目中的所有爬虫。
通过命令 scrapy crawl blog 来启动当前项目中名为blog的爬虫,在执行结束后,可以看到爬取到的信息。
这篇笔记花了大概两天的时间,主要是介绍一些基本命令的使用,也尝试爬取到了网页上的特定数据,并且新建了Scrapy项目,可以说正式开始了一个完整爬虫项目的开发。