Python爬虫-Scrapy框架(二)- 交互式命令模式

版权声明:版权声明 https://blog.csdn.net/sunzhihao_future/article/details/88643984

写在前面

交互式命令模式这一部分主要介绍了对Scrapy的爬取功能进行测试,以及一些简单命令的使用,包括如何创建一个Scrapy项目。在这一篇文章中主要是介绍一些基本命令的使用,在代码方面讲解较少,重点还是放在后面的章节。

交互式命令模式

使用shell命令

我们可以进入Scrapy交互式命令模式对要爬取的页面进行测试,查看获取到的内容。我们在命令行程序中使用命令 scrapy shell https://blog.csdn.net/sunzhihao_future 来进入交互模式,即 scrapy shell后面追加要爬取的网址
shell
成功打开后,会进入下图所示的交互命令模式。类似于python,可以直接输入要执行的命令。
shell
在上述shell命令执行的过程中,打开了指示的链接,将爬取的内容保存到了response变量。可以通过命令 response 来查看保存的变量。
通过命令 view(response) 来查看获取到的具体的数据,即response中的内容。
response
终端在收到view(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的操作页面。
XPath Helper
如果想要获取某个HTML元素的XPath路径,可以通过Ctrl + Shift然后同时鼠标移动到想要获取路径的元素上。
XPath Helper
这样就可以获取到元素 “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
以上已经成功获取了某一个特定元素,如何同时获取一类元素呢?以页面中出现的所有文章的浏览量为例。
打开浏览器的开发者模式或者观察同类元素的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']

XPath
回到命令行程序,同样使用上面提到的语法,成功获取到了这一类元素。
XPath

创建Scrapy项目

在命令行程序中通过命令 scrapy startproject csdn_sun 来创建一个名称为csdn_sun的Scrapy项目。将创建好的项目(文件夹)用PyCharm打开,观察文件目录。这样我们创建好了一个新的Scrapy项目。
在spiders目录下新建Python File,作为爬虫文件。
PyCharm
在刚刚新建的爬虫文件中添加下述代码:

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的爬虫,在执行结束后,可以看到爬取到的信息。Terminal
这篇笔记花了大概两天的时间,主要是介绍一些基本命令的使用,也尝试爬取到了网页上的特定数据,并且新建了Scrapy项目,可以说正式开始了一个完整爬虫项目的开发。

猜你喜欢

转载自blog.csdn.net/sunzhihao_future/article/details/88643984
今日推荐