美文网首页
Scrapy 框架的简单使用(十五)

Scrapy 框架的简单使用(十五)

作者: 梦捷者 | 来源:发表于2019-07-30 22:01 被阅读0次

    一、在Scrapy框架中新建爬虫项目

    • 新建项目的语法格式:scrapy startproject <project_name> [project_dir]
      注意:该命令会在project_dir文件加下创建一个名为project_name的Scrapy新项目。如果project_dir没有指定,project_dir与project_name相同。(带尖括号的必须要写,中括号的不一定要写)
    • 具体示例:进入你想要存放项目的目录下运行一下命令scrapy startproject tz_spider(项目名字)
      该命令会在当前目录创建包含一下文件的名为tz_spider的目录(用tree命令来进行查看):

    二、在Scrapy框架中编写爬虫

    1、创建一个TzcSpider的类,它必须继承scrapy.Spider类,需要定义一下三个属性:
    • name:spider的名字,必须且唯一。
    • start_urls: 初始的url列表(可以有多个请求,是按顺序来进行的,当列表中的第一个请求结束后,就进行第二个请求,直到结束为止)。
    • parse(self, response) 方法:每个初始url完成之后被调用。这个函数要完成一下两个功能:
      (1)解析响应,封装成item对象并返回这个对象。
      (2)提取新的需要下载的url,创建新的request,并返回它。
    2、我们也可以通过命令创建爬虫(注意:一定要cd到创建项目的根目录下进行相关命令)
    • 语法格式:scrapy genspider [-t template] <name> <domain>
      示例:运行命令:scrapy genspider tzc www.shiguangkey.com
    • 以上步骤结束后,会在spiders文件夹下生成tzc.py文件,文件内容如下:
    • 接下来,我们来完善这个爬虫,代码如下: 注意:parse()会在请求完成时被调用。response是请求返回来的响应,可以通过xpath或者css方法很方便的解析。分析页面结构,提取课程需要的数据,生成一个字典,然后通过json模块,转成字符串,写入项目根目录下的course.txt 文件内。

    三、在Scrapy框架中运行爬虫

    • 首先进入项目根目录,然后运行命令就可以启动爬虫了:scrapy crawl tzc(爬虫名字)
      注意:这个命令会启动我们刚才创建的那个名为tzc的爬虫,你会在屏幕上得到类似下图的输出。(在项目目录下启动爬虫命令)
    • 现在检查项目根目录,我们会发现多了一个course.txt的文件,即是我们刚才下载的课程内容信息。

    四、 在Scrapy框架中追踪链接(进行追踪爬取链接网页源代码)

    上面的爬虫仅仅只爬取了一页,当然不符合我们的要求,我们需要爬取下一页,下一页,直到所有的信息都被下载。我们从页面中提取连接,或者根据规则构建。现在来看我们的爬虫修改为递归的爬取下一页的链接,从中提取数据。

    • 我们创建了一个类变量page_num用来记录当前爬取到的页码,在parse函数中提取课程信息,然后通过爬虫对象给变量page__num自加1,构造下一页的url,然后创建scrapy.Request对象并返回。如果response中提取不到课程信息,我们判断已经到了最后一页,parse函数直接return结束。
    • 注意:Scrapy.Request(url)会让scrapy框架自动处理请求,默认调用方法为parse方法。

    五、在Scrapy框架中定义(激活)item管道

    • 注意:由于直接在爬虫类中编写代码会每次进行请求时会打开文件,当爬取完文件后就会关闭文件,重复这个过程,知道没有请求url为止,这样导致内存极大的浪费。所以将文件写入到piplines.py中(即items管道中,在settings.py文件中激活此管道)--------利用了反射机制来调用相关的类。
    • item管道的典型用途是:
      1、清理HTML数据
      2、验证已删除的数据(检查项目是否包含某些字段)
      3、检查重复项(并删除它们)
      4、将已爬取的item进行数据持久化
    • 我们先修改爬虫文件见下图:

    六、在Scrapy框架中编写管道类

    • 我们编写一个用来存储课程信息到courses.txt文件中的管道类,修改项目下piplines.py文件,代码如下:
    • 要激活这个管道组件,必须将其添加到ITEM_PIPELINES设置中,在settings文件中设置如下: 在此设置中为类分配的整数值决定了它们运行的顺序:按照从较低值到较高值的顺序进行。

    注意:这个管道的目的只是介绍如何编写项目管道,如果要将所有爬取的item存储到json文件中,则应使用Feed导出,在运行爬虫是加上如下参数:scrapy crawl tzc -o courses.json

    七、定义item(在items.py文件中定义item对象)

    • 抓取的主要目标是从非结构化数据源(通常是web页面)中提取结构化数据。

    • Scrapy spider可以将提取的数据作为Python的dicts返回。虽然方便且熟悉,但Python的dicts缺乏结构:很容易在字段名中犯错误或返回不一致的数据,特别是在有许多爬虫的大型项目中。

    • 若要定义公共输出数据格式,Scrapy提供了Item类。Item对象是用于收集剪贴数据的简单容器。它们提供了一个类似词典的API,提供了一种方便的语法来声明它们的可用字段。scray.Item对象是用于收集抓取数据的简单容器,使用方法和python的字典类似。编辑项目目录下items.py文件。

      作用:就是声明一下item对象中必须有的几个字段而已。这个文件相当于一个容器。
    • 然后我们只需要在爬虫中导入我们定义的Item类,实例化后用它进行数据结构化。

    相关文章

      网友评论

          本文标题:Scrapy 框架的简单使用(十五)

          本文链接:https://www.haomeiwen.com/subject/nhuxdctx.html