大家好,我是菜鸟小哥哥!之前分享了很多requests和selenium的Python爬虫文章。本文将从原理到实践,带你了解另一个强大的框架Scrapy。如果你对Scrapy感兴趣,不妨跟着这篇文章一起动手吧!1、Scrapy框架介绍Scrapy是:一个用Python语言开发的快速、高级的屏幕抓取和网页爬虫框架,用于抓取网站和从页面中提取结构化数据,只需要少量的代码,它可以被迅速捕获。2.运行原理Scrapy框架的运行原理看下图就够了(其实原理比较复杂,不是三言两语说清楚的,有兴趣的读者可以进一步阅读更多相关文章来了解)了解,本文不再过多解释)Scrapy主要包含以下组件:ScrapyEngineItemSchedulerDownloaderSpidersPipelineDownloaderMiddlewaresMiddlewareSpiderMiddlewaresSchedulerMiddewares三、入门3.1安装第一种:在命令行模式下使用pip命令安装:$pipinstallscrapy第二种:先下载,再安装:$pipdownloadscrapy-d./#通过国内指定镜像源下载$pipdownload-ihttps://pypi.tuna.tsinghua.edu.cn/simplescrapy-d./进入下载目录后,执行如下命令安装:$pipinstallScrapy-1.5.0-py2.py3-none-any.whl3.2使用1.)使用大致分为以下四步1创建scrapy项目scrapystartprojectmySpider2.)生成爬虫scrapygenspiderdemo"demo.cn"3.)提取数据并完善spider使用xpath等4.)保存数据管道保存数据3.3程序运行运行爬虫命令scrapycrawlqb#qb爬虫名称在pycharm中运行爬虫fromscrapyimportcmdlinecmdline.execute("scrapycrawlqb".split())四、基本步骤具体使用步骤Scrapy爬虫框架如下:《选择目标网站定义要爬取的数据(通过ScrapyItems完成)编写蜘蛛提取数据执行蜘蛛获取数据数据存储》五.目录文件说明我们在创建scrapy项目的时候,继续创建一个spider。目录结构是这样的:下面简单介绍一下各个主要文件的作用:scrapy.cfg:项目的配置文件mySpider/:项目的Python模块,代码会从这里引用mySpider/items.py:项目的目标文件mySpider/pipelines.py:项目的管道文件mySpider/settings.py:项目的设置文件mySpider/spiders/:爬虫代码存放目录》5.1scrapy.cfg文件项目配置文件这是文件的内容:#自动创建者:scrapystartproject##有关[deploy]部分的更多信息,请参阅:#https://scrapyd.readthedocs.io/en/latest/deploy.html[settings]default=mySpider.settings[deploy]#url=http://localhost:6800/project=mySpider5.2mySpider**/**项目的Python模块,代码5.3mySpider/items.py项目的目标文件将从这里引用#在这里定义你的抓取项目的模型##请参阅文档:#https://docs.scrapy.org/en/latest/topics/items.htmlimportscrapyclassMyspiderItem(scrapy.Item):#define你的项目的字段在这里像:#name=scrapy.Field()pass定义了scrapy项目的模块,例如:name=scrapy.Field()mySpider/pipelines.py项目的5.4管道文件#在这里定义你的项目管道##不要忘记将管道添加到ITEM_PIPELINES设置#请参阅:https://docs.scrapy.org/en/latest/topics/item-pipeline.html#对于使用来自itemadapter的单一接口导入ItemAdapterclassMyspiderPipeline:defprocess_item(self,item,spider):返回的item文件就是我们所说的pipeline。当Item在Spider中被收集后,会被传递给ItemPipeline(管道)。这些ItemPipeline组件按照定义的顺序处理Item每个ItemPipeline是一个Python类,它实现简单的方法,例如决定是否应该丢弃和存储Item。以下是itempipeline的一些典型应用:验证爬取的数据(检查item是否包含某些字段,例如名称字段)检查重复(并丢弃)将爬取的结果保存到文件或数据库5.5mySpider/settings。py项目设置文件#mySpider项目的Scrapy设置...BOT_NAME='mySpider'#scrapy项目名称SPIDER_MODULES=['mySpider.spiders']NEWSPIDER_MODULE='mySpider.spiders'......#Obeyrobots.txtrulesROBOTSTXT_OBEY=False#是否遵守约定,一般给false,但是创建项目后为True,我们改为False#配置Scrapy执行的最大并发请求(默认:16)#CONCURRENT_REQUESTS=32#最大并发默认值to16......#DOWNLOAD_DELAY=3#下载延迟3秒#覆盖默认请求头:#请求头,我们打开DEFAULT_REQUEST_HEADERS={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language':'en',}#Spidermiddleware#SPIDER_MIDDLEWARES={#'mySpider.middlewares.MyspiderSpiderMiddleware':543,#}#下载中间件#DOWNLOADER_MIDDLEWARES={#'mySpider.middlewares.MyspiderDownloaderMiddleware':543,#}......#配置项目管道#参见https://docs.scrapy.org/en/latest/topics/item-pipeline.html#ITEM_PIPELINES={#'mySpider.pipelines.MyspiderPipeline':300,#Pipeline#}......省略号省略代码,一般要点,给出注释6.mySpider/spiders/:存放爬虫代码DirectoryimportscrapyclassDbSpider(scrapy.Spider):name='db'allowed_domains=['douban.com']#可以修改start_urls=['http://douban.com/']#开头的url也可以修改defparse(self,response):#pass6.ScrapyshellScrapy终端是一个交互式终端,我们可以在不启动蜘蛛的情况下尝试和调试代码,也可以用来测试XPath或CSS表达式,看看它们如何work,方便我们爬取的网页提取的数据,但一般用的不多。有兴趣的可以查看官方文档:官方文档http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/shell.htmlScrapyShell会根据下载的页面自动创建一些方便的对象,比如作为Response对象和Selector对象(用于HTML和XML内容)。shell加载时会得到一个包含响应数据的本地response变量,输入response.body会输出响应包body,输出response.headers可以看到响应包头。当输入response.selector时,会得到一个response初始化的Selector类的对象。这时候可以使用response.selector.xpath()或者response.selector.css()来查询response。Scrapy也提供了一些快捷方式,比如response.xpath()或response.css()也可以生效(如上例)。Selectors选择器《ScrapySelectors内置XPath和CSSSelector表达式机制》Selector有四种基本方法,最常用的是xpath:xpath():传入xpath表达式,返回表达式列表list对应的所有节点的选择器extract():将节点序列化为字符串并返回列表css():传入一个CSS表达式,返回该表达式对应的所有节点的选择器列表列表,语法同BeautifulSoup4re():根据对输入的正则表达式提取数据并返回字符串列表。七。实践案例本节我将以使用Scrapy爬取战库数据为例。7.1案例描述现在我们对scrapy的工作流程和原理有了初步的了解,下面来做一个入门的小案例,爬取渣古首页推荐的物品信息。如下图,一个小方框是一个item信息。我们要提取每个项目的六个组件:imgLink(封面图片链接);标题(标题);类型(类型);访问者(受欢迎程度);评论(评论数);item,我们还需要通过翻页来实现批量采集数据。7.2文件配置目录结构在上一篇文章中,我们讲解了新的scrapy项目(zcool)和spider项目(zc),这里不再赘述,然后得到我们的目录结构如下图所示:start.py文件运行起来方便,在zcool目录下新建start文件。并进行初始化设置。fromscrapyimportcmdlinecmdline.execute('scrapycrawlzc'.split())settings.pyfile在这个文件中我们需要做几个设置
