赞
踩
Scrapy
在
github
上得分比较高,深受爬虫人员的喜爱。
Scrapy
爬虫框架是一个爬取效率高、相关扩展组件多,为了提取结构性数据而编写的开源框架。Scrapy
用途非常广泛,不仅可以应用到网络爬虫中,还可以用于数据挖掘、数据监测以及自动化测试等。
Scrapy是基于Twisted的异步处理框架,架构清晰、可扩展性强,可以灵活地完成各种需求。
Scrapy
爬虫框架这里给出了Scrapy框架的整体架构:
我们来解析理解该框架的原理: (理解方式先分看各个模块功能再总的理解数据流向)
先简述一个普通的网站的爬取流程:
1、获取爬取网站的URL
2、发送请求
——>>>>>>>>>>>>>>>>>>【可能遇到请求失败,被拦截】
3、返回响应
4、进行响应数据解析
——>>>>>>>>>>>>>>>>>>【结构化数据解析,存储不同的容器中】
5、持久化存储
然后我们在去看Scrapy爬虫框架:
Scrapy Engine (框架引擎)
: 位于整个框架系统的中心位置,显而易见是大脑的地位,用于处理整个系统的数据流,触发各种事件,是整个框架的核心。
Scheduler
(调度器): 用于接收引擎发过来的请求,添加至队列中,在引擎再次请求时将请求返回给引擎。可以理解为从URL 队列中取出一个请求地址,同时去除重复的请求地址。
Downloader
(下载器): 用于从网络下载Web资源。
Spiders
(网络爬虫): 从指定网页中爬取需要的信息。
Item Pipeline
(项目管道): 用于处理爬取后的数据,例如数据的清洗、验证以及保存。
中间件:
Downloader Middlewares
(下载器中间件): 位于Scrapy
引擎和下载器之间,主要用于处理引擎与下载器之间的网络请求与响应。
Spider Middlewares
(爬虫中间件): 位于爬虫与引擎之间,主要用于处理爬虫的响应输入和请求输出。
Scheduler Middewares
(调度中间件): 位于引擎和调度之间,主要用于处理从引擎发送到调度的请求和响应。
安装的过程如果出现报错,这里不做详述(每个程序员必经之路,永远是过程的见证者)。
conda install scrapy
由于Scrapy
爬虫框架依赖的库比较多,需要先安装twisted
、lxml
、pyOpenSSL
以及pywin32
。
所有第三方库文件下载网址:第三方库镜像下载
安装扩展库的三种方式:
1、cmd命令提示行通过pip命令进行安装
2、IDE自带的第三方库安装市场安装,如:pycharm
3、库文件进行安装
创建一个爬虫项目: scrapy startproject scrapyDemo
创建了一个名为 scrapyDemo
的项目
spiders
(文件夹):用于创建爬虫文件,编写爬虫规则。
__init__
文件:初始化文件。
items
文件:用于数据的定义,可以寄存处理后的数据,是定义爬取的字段信息。
middlewares
文件:定义爬取时的中间件,其中包括SpiderMiddleware
(爬虫中间件)、DownloaderMiddleware
(下载中间件)。
pipelines
文件:用于实现清洗数据、验证数据、保存数据,在实际爬虫项目中,主要用于爬虫数据的清洗和入库操作。
settings
文件:整个框架的配置文件,主要包含配置爬虫信息,请求头、中间件等。
scrapy.cfg
文件:项目部署文件,其中定义了项目的配置文件路径等相关信息。
在创建的Scrapy爬虫项目中:
存在两句话:
cd scrapyDemo
scrapy genspider example example.com
在Scrapy genspider命令中,有两个参数,“example”和“example.com”。
第1个参数example
是爬虫的名字,这个名字可以取英文和数字的组合,但是绝对不能为scrapy
或者工程的名字。
第2个参数example.com
(一级域名也可以是二、三级域名)是需要爬取的网址。
我们修改一下baidu.py看一下运行效果:
class BaiduSpider(scrapy.Spider):
name = 'baidu'
allowed_domains = ['baidu.com']
start_urls = ['http://baidu.com/']
def parse(self, response):
print(response.body.decode)
运行该项目在命令行输入:scrapy crawl baidu
在输出的日志中发现了被robots.txt协议所禁止。此时需要修改settings.py
文件,改为False。
再次命令行输入scrapy crawl baidu
运行即可。
Scrapy的爬虫与普通的Python文件或者前面章节中讲到的普通爬虫的不同之处在于,Scrapy的爬虫需要在CMD或者终端中输入命令来运行,不能直接运行spiders文件夹下面的爬虫文件。
我们想以python文件进行运行,那么可以创建一个main.py
文件,文件中写入
from scrapy import cmdline
cmdline.execute("scrapy crawl baidu".split())
如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。