Scrapy

Scrapy的运行流程如下,整体在Scrapy Engine的调度下,首先运行的是Scheduler(调度器),Scheduler从(下载队列)url队列中取出一个URL,将这个url交给Downloader,Downloader下载这个URL对应的Web资源,然后将下载的原始数据交给Spiders,Spiders会从原始数据中提取出有用的信息,最后将提取出的数据交给Item Pipeline,这是一个数据管道,可以通过Item Pipeline将数据保存到数据库、文本文件或其他存储介质上。
从上面的话中,我们得知
Scrapy主要包括6个部分
1.Scrapy Engine(Scrapy 引擎):用来处理整个系统的数据流,触发各种事件
2.Scheduler(调度器):从url队列中取出一个URL
3.Downloader(下载器):下载这个URL对应的Web资源
4.Spiders(网络爬虫):接收下载器下载的原始数据,做进一步的处理,例如:使用XPath提取感兴趣的信息
5.Item Pipeline(项目管道):接收网络爬虫传过来的数据,以便做进一步处理。例如,存入数据库,存入文本文件
6.中间件:整个Scrapy框架有很多中间件,如下载中间件、网络爬虫中间件等,这些中间件相当于过滤器,夹在不同部分之间截获数据流,并进行特殊的加功处理。

Scrapy提供一个Shell,相当于Python的REPL环境,可以用这个Scrapy Shell测试Scrapy代码。
执行方式很简单
打开终端,输入Scrapy shell命令,就会进入Scrapy shell。
今天学到了Spiders(网络爬虫)目录下编写的爬虫,和不在该框架下编写有个很大的区别就是他是有固定格式的


简单来说就是他是定义个类(继承scrapy.Spider类),这个类一定要有命名name = '某某',更具这个命名来执行该爬虫,执行语句是scrapy crawl 命名,命名之后有个url_list=[],这里面是存放url的,接着是编写解析函数(2个参数,self和response),response.xpath直接编写xpath语句,不用考虑解析的页面是从哪来,挺方便的。
执行语句文件的话还可以编写个.py文件,这样方便执行(但我觉得有时候终端输入执行命令挺好),
执行语句cmdline.execute应该是打印输出在终端

from scrapy import cmdline
# 通过代码运行基于Scrapy框架的网络爬虫
cmdline.execute('scrapy crawl FirstSpider'.split()) #还可以使用对字符串处理的函数
# 当然也可以执行保存文件;-o之后就是文件名也是用括号括起来的
cmdline.execute('scrapy crawl ItemLoaderSpider1 -o items-3.json'.split())

items.py也就是项目管道,存储数据的地方,这个也是定义个类,该类必须继承scrapy.Item。
每个类就是一个存储数据的地方,采用变量的方式可以更方便的引用他们到spireds文件夹中的爬虫文件中
一般都是scrapy.Field(),代表是文件

import scrapy
class MyscrapyItem(scrapy.Item):
    # 每一个要保存的属性都必须是Field类的实例
    title = scrapy.Field()
    href = scrapy.Field()
    abstract = scrapy.Field()

保存文件的话需要使用ItemLoader类(ItemLoader类的构造要有2个参数,1个是item,一个是Response)

posted @ 2021-09-20 15:07  索匣  阅读(84)  评论(0编辑  收藏  举报