Scrapy是用纯Python实现的一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
scrapy执行流程:
1.spiders(爬虫文件)将提取到的url传给Scrapy Engine(引擎)
- 然后通过引擎再传给Scheduler(调度器),Scheduler(调度器)把接收到的url存放在任务队列中
- 引擎再从任务队列里取出url通过Downloader Middlewares(下载中间件)传给Downloader(下载器)发起请求
- Downloader(下载器)请求网络然后把response(响应结果)通过Downloader Middlewares(下载中间件)传给引擎,再通过Spider Middlewares(爬虫中间件)返回给Spiders(爬虫文件)
- 最后爬虫文件把提取到的数据传给Item Pipeline(管道文件)-数据队列。
Scrapy的安装介绍:
-
Windows 安装方式
-- Python 3
-- 升级pip版本pip3 install --upgrade pip
通过pip3 安装 Scrapy 框架
pip3 install Scrapy
-
Linux 安装方式
通过pip3 安装 Scrapy 框架sudo pip3 install scrapy
如果安装不成功再试着添加这些依赖库
sudo apt-get install python3-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
基本项目流程为:
1、创建一个Scrapy项目
# 创建爬虫项目
scrapy startproject jobboleproject
# 新建爬虫文件
scrapy genspider jobbole [jobbole.com](http://jobbole.com)
2、定义提取的Item
比如我们打算抓取: 目标url:
http://blog.jobbole.com/all-posts/
3、编写爬取网站的spider并提取Item
#标题
title = scrapy.Field()
#创建时间
create_date = scrapy.Field()
#文章地址
url = scrapy.Field()
#id
url_object_id = scrapy.Field()
#文章图片
front_image_url = scrapy.Field()
4、编写Item Pipeline来存储提取到的Item(即数据)
--item pipiline组件是一个独立的Python类,其中process_item()方法必须实现:
class JobbolePipeline(object):
def __init__(self):
# 可选实现,做参数初始化等
# doing something
def process_item(self, item, spider):
# item (Item 对象) – 被爬取的item
# spider (Spider 对象) – 爬取该item的spider
# 这个方法必须实现,每个item pipeline组件都需要调用该方法,
# 这个方法必须返回一个 Item 对象,被丢弃的item将不会被之后的pipeline组件所处理。
return item
def open_spider(self, spider):
# spider (Spider 对象) – 被开启的spider
# 可选实现,当spider被开启时,这个方法被调用。
def close_spider(self, spider):
# spider (Spider 对象) – 被关闭的spider
# 可选实现,当spider被关闭时,这个方法被调用
5、运行:
scrapy crawl jobbole