Scrapy爬虫框架
1、Scrapy
是一个爬虫框架,提取结构性的数据。其可以应用在数据挖掘,信息处理等方面。提供了许多的爬虫的基类,帮我们更简便使用爬虫。基于Twisted。
2、scrapy安装
依赖库:lxml,twisted
pip install lxml
在线安装方法
安装依赖库Twisted
pip install twisted
pip install -i https://pypi.tuna.tsinghua.edu/sample twisted
镜像:
https://pypi.tuna.tsinghua.edu/sample
http://mirrors.aliyun.com/pypi/sample
离线安装方法(推荐)
首先安装依赖库Twisted
(1)pip install (依赖库的路径)
在这个网址 http://www.lfd.uci.edu/~gohlke/pythonlibs#twisted
下面去寻找符合你的python版本和系统版本的Twisted
(2)然后在安装scrapy框架
pip install scrapy
【注意】路径名不能有中文,不能用管理员进入cmd,电脑系统用户路径不能是中文
3、Scrapy框架的运行原理
4、框架简介
该框架是一个第三方的框架,许多功能已经被封装好了。
(1)Scrapy Engine 引擎
负责组件之间数据的流转,当某个动作发生时触发事件。
(2)Scheduler 调度器
接收requests,并把他们入队,以便后续的调度。
(3)Downloader 下载器
用于下载网页内容,并且返回给蜘蛛(下载器基于Twisted的高效异步模型)
(4)Spiders 蜘蛛或爬虫
用户编写(分析网页的地方,我们主要的代码写在这里)的可定制化的部分,负责解析response,产生items和URL。
(5)Item Pipeline 管道
负责处理item,典型的用途:清洗、验证、持久化。
(6)Downloadermiddlewares
位于引擎和下载器之间的一个钩子,处理传送到下载器的requests和传送到引擎的response(若需要 在Requests到达Downloader之前或者是responses到达spiders之前做一些预处理,可以使用该中间件来完成)。
(7)Spidermiddlewares
位于引擎和抓取器之间的一个钩子,处理抓取器的输入和输出 (在spiders产生的Items到达Item Pipeline之前做一些预处理或response到达spider之前做一些处理)。
5、Scrapy运行流程
(1)键入scrapy crawl xxx, 用爬虫xxx来驱动引擎开始工作
(2)引擎驱动起来首先加载scrapy依赖程序(比如:lxml、twisted等),加载完依赖程序以后,引擎就可以正常工作
(3)引擎加载setting文件,从中读取当前工程的配置信息,根据配置信息去安排后面的工作
(4)引擎加载扩展程序,我们不需要修改,主要对引擎的功能进行扩展
(5)引擎加载下载中间件
(6)引擎加载爬虫中间件
(7)引擎加载管道的一些列组件
(8)(说明:以上7个步骤都是准备阶段,当准备工作完了,就可以正常运行)引擎根据键入的xxx这个爬虫的名字,来找到对应的类并且将该类实例化,把工程中所有引入的中间件和管道组件类都实例化
(9)引擎会从实例化的xxx这个爬虫对象的start_urls中提取出起始url,并且检验是否在allowed_domains里面,如果在则将这些url加入到调度器的调度队列中。
(10)调度器对调度队列的url进行出队,然后创建若干个异步的高性能的下载器对象来下载url(注意:如果调度队列url的数量多于最大并发量,则多出的那些url等待)
(11)下载器将url请求(请求的过程会讲过若干层的下载中间件的过滤),并且获得响应,然后将响应的数据通过回调函数传递给爬虫对象
(12)爬虫对象对传递过来的响应数据进行解析,并且将解析的数据封装到一个可迭代的容器中,返回给引擎。
(13)如果管道已经开启,引擎会根据管道的优先级顺将爬虫返回过来的数据依次传递给各个管道
(14)管道对响应数据进行最后的处理,处理结束以后数据在返回给引擎由引擎来销毁(15)关闭爬虫、中间件和管道然后关闭引擎,并且输出这次爬虫的一些请求与响应以及调度等信息。
6、简单用法
(1)创建项目
指令:scrapy startproject 项目名
(2)项目目录结构
firstSpider
firstSpider
spiders 爬虫目录(写代码位置)
__init__.py
myspider.py 爬虫文件,以后的爬虫代码写在这里
__init__.py
items.py 定义数据结构地方
middlewares.py 中间件(了解)
pipelines.py 管道文件
settings.py 项目配置文件
scrapy.cfg
项目创建处理,里面是没有爬虫的,我们需要通过指令来创建一个爬虫:
cd firstSpider/firstSpider
scrapy genspider qiubai “www.qiushibaike.com"
以上指令完事后,就会在firstSpider/firstSpider/spiders里面自动创建一个qiubai.py
name: 爬虫的名字,启动的时候根据爬虫的名字启动项目
allowed_domains:允许的域名,就是爬取的时候这个请求要不要发送,如果是该允许域名之下的url,就会发送,如果不是,则过滤掉这个请求,这是一个列表,可以写多个允许的域名
start_urls:爬虫起始url,是一个列表,里面可以写多个,一般只写一个
def parse(self, response): 这个函数非常重要,就是你以后写代码的地方,parse函数名是固定的,当收到下载数据的时候会自动的调用这个方法,该方法第二个参数为response,这是一个响应对象,从该对象中获取html字符串,然后解析之。【注】这个parse函数必须返回一个可迭代对象
(3)定制item.py,其实就是您的数据结构,格式非常简单,复制粘贴即可
(4)撰写蜘蛛
打印response对象,简单跑一把
指令:cd firstSpider/firstSpider/spiders
scrapy crawl qiubai
【注意】抓取的时候会出错
pip install pypiwin32
根据response获取网页内容
response.text 字符串类型
response.body 二进制类型
(5)运行
scrapy crawl qiubai -o qiubai.json
scrapy crawl qiubai -o qiubai.xml
scrapy crawl qiubai -o qiubai.csv
用Scrapy写爬虫的一步骤:
1)创建项目 scrapy startproject 项目名
2)创建爬虫 scrapy genspider 爬虫名 域名
运行爬虫 scrapy crawl 爬虫名 [-o xx.json/xml/csv]
3)根据需求编写item
4)在spiders里面解析数据
5)在管道中处理解析完的数据