Scrapy框架学习

来源:互联网 发布:linux 桌面 命令 编辑:程序博客网 时间:2024/05/29 08:51

最开始学习爬虫的时候,我用的是urllib2和BeautifulSoup这两个库,使用这两个库的时候,所有爬虫的框架都要自己写,一开始还觉得没什么,到最后写的越来越多的时候就觉得很麻烦,因为我的重点是爬取数据分析数据啊,不是浪费时间去写什么爬虫框架。
后来了解到scrapy这个框架,用这个框架写爬虫的话感觉真的非常爽,因为它真的很高效。比如原来你用urllib2和BeautifulSoup写个200行的爬虫代码,用scrapy40行左右就可以搞定。

一、了解scrapy框架
1、什么是scrapy
scrapy是一个用python编写的,轻量级,简单轻巧,使用简单的爬虫框架。它使用Twisted异步网络库处理网络通讯。scrapy的框架如下:
这里写图片描述

2、scrapy中的各组件
2.1、Scrapy Engine
Scrapy的引擎,用来处理整个系统的数据流处理。
2.2、Scheduler
调度器,Scheduler接受从引擎发送过来的请求,压入队列之中,在引擎再次请求的时候返回给引擎。
2.3、Downloader
拿到请求之后,下载网页,并将下载的网页送给Spider进行处理。
2.4、Spiders
Spiders是蜘蛛,主要是解析网页的内容,我们可以在Spiders里面定制解析的规则。
2.5、Item Pipeline
项目管道,主要是用来存储数据以及对数据进行加工处理的。
2.6、Downloader Middlewares
下载器中间件,位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
2.7、Spider Middlewares
蜘蛛中间件,介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。
2.8、Scheduler Middewares
调度中间件,介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

3、数据处理流程
Scrapy的整个数据流是由引擎控制的,引擎打开一个域名,并让蜘蛛处理这个域名,蜘蛛获取一个需要爬取的URL后,将这个需要爬取URL返回给引擎,引擎再将这个需要爬取的URL放到调度器中。
接下来引擎再从调度器中取出一个待爬取的URL,将这个URL送给下载器进行下载,下载器下载完毕之后,将结果再返回给引擎。引擎再将结果交给蜘蛛进行解析。
蜘蛛将下载的页面解析为新的需要下载的URL和数据。新的URL发送给引擎。而数据则是交给项目管道进行处理。
项目管道可以对数据进行处理、加工和存储。

二、使用scrapy框架
1、新建一个工程
命令:scrapy startproject 项目名
例:
这里写图片描述

2、项目的结构:
这里写图片描述

其中items.py文件中可以定制自己想要爬取的数据。
pipelines.py里面可以定制存储方式,比如可以直接存储到数据库中,也可以存储到文件中。settings.py里面设置一些选项,比如你想让pipelines.py生效,那你就要在settings.py里面设置ITEM_PIPLINES选项。
Spiders是一个目录,我们可以在这个目录里面创建一个.py文件,在里面定制页面解析的规则。

3、爬取我的csdn博客
3.1、创建一个mycsdnblog项目
scrapy startproject mycsdnblog;

3.2、定制要爬取的数据
一个博客只需要url和title就可以,所以在items.py中定义如下类型:
这里写图片描述

3.3、定制保存数据的方式
我么将爬取的内容通过json序列化之后保存到文件中,可以在pipelines.py中做如下修改,:
这里写图片描述

3.4、在settings.py文件中设置ITEM_PIPLINES使得pipelines.py文件生效,由于有些网页会禁止爬虫爬取,所以我们可以修改USER_AGENT这个选项将爬虫伪装成浏览器进行爬取。
这里写图片描述

3.5、定制网页的解析方式
这里写图片描述

3.6、部分结果展示
这里写图片描述

3.7、项目源码
爬取博客源码

4、爬取全国的天气
选择15tianqi.com这个网站,爬取全国的天气预报,并将结果存入到数据库中。
爬取天气源码

1 0
原创粉丝点击