网络爬虫开发常用框架
爬虫框架就是一些爬虫项目的半成品,可以将一些爬虫常用的功能写好。然后留下一些接口,在不同的爬虫项目中,调用适合自己项目的接口,再编写少量的代码实现自己需要的功能。因为框架已经实现了爬虫常用的功能,所以为开发人员节省了很多精力与时间。
1、Scrapy爬虫框架
这是一套比较成熟的python爬虫框架,简单轻巧,并且非常方便。可以高效率的爬取Web页面并从页面中提取结构化的数据。Scrapy是一套成熟的框架,所以在使用时不需要担心收取费用的问题。其网址为:https://scrapy.org 可以看下他们的开发文档
源码地址:https://github.com/binux/pyspider/releases
开发文档地址为:http://docs.pyspider.org/
2、Crawley 爬虫框架
Crawley也是python开发出的爬虫框架,该框架致力于改变人们从互联网中提取数据的方式。特性如下:
基于Eventlet构建的高速网络爬虫框架
可以将数据存储在关系型数据库中,如mysql
可以将爬取的数据导入为Json、XML格式
支持非关系数据跨
支持命令行工具
可以使用喜欢的工具进行数据的提取
支持使用Cookie登录或访问那些只有登录才可以访问的网页
简单易学(hope so)
官网地址为:http://project.crawley-cloud.com
3、PySpider爬虫框架
相对于Scrapy框架而言,PySpider框架是一支新秀。它采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器、任务监视器、项目管理器以及结果查看器。有如下特性:
Python脚本控制,可以用任何你喜欢的html解析包
Web界面编写调试脚本、起停脚本、监控执行状态、查看活动历史、获取结果产出
支持RabbitMQ、Beanstalk、Redis和Kombu作为消息队列
支持抓取JavaScript的页面
强大的调度控制,支持超时重爬及优先级设置
组件可替换,支持单机/分布式部署,支持Docker部署
4、Scrapy 爬虫框架的使用
(1)搭建
01 安装Twisted模块 计算机需要有c++ 14.0的相关支持,可以我的网盘里下载
02 安装Scrapy模块 直接安装即可
03 安装pywin32模块 直接安装即可
(2)创建Scrapy项目
在指定文件夹内打开命令行,输入: scrapy startproject scrapyDemo,即可创建一个名为‘scrapyDemo’的项目
(3)创建爬虫
在创建爬虫时,首先需要创建一个爬虫模块的文件,该文件需要放置在spiders文件夹中。爬虫模块是用于从一个网站或多个网站中爬取数据的类,它需要继承scrapy.Spider类,下面通过一个例子,实现爬取网页后将网页的代码以html文件保存到项目文件夹当中,如下:
import scrapy class QuotesSpider(scrapy.Spider): name = 'quotes' #定义爬虫的名称 def start_requests(self): #设置爬取目标的地址 urls=[ 'https://www.juzimi.com/article/23959', 'https://www.juzimi.com/article/23959?page=1', 'https://www.juzimi.com/article/23959?page=2' ] #获取所有地址,有几个地址发送几次请求 for url in urls: #发送网络请求 yield scrapy.Request(url=url,callback=self.parse) def parse(self, response): #获取页数 page=response.url.split('/')[-2] #根据页数设置文件名称 filename='quotes-%s.html'%page #写入文件的模式打开文件,如果没有该文件将创建该文件 with open(filename,'wb') as f: #向文件中写入获取的html代码 f.write(response.body) #输出保存文件的名称 self.log('Saved file %s'%filename)
在运行Scrapy 所创建的爬虫项目时,需要在命令窗口中输入“scrapy crawl quotes”,其中“quotes”是自己定义的爬虫名称。
除了使用在命令窗口中启动外,还可以在程序中启动爬虫的API,也就是CrawlerProcess类。首先需要在CrawlerProcess初始化时传入项目的settings信息,然后在crawl()方法中传入爬虫的名称,最后通过start()方法启动爬虫,代码如下:
#导入CrawlerProcess类 from scrapy.crawler import CrawlerProcess #导入获取项目设置信息 from scrapy.utils.project import get_project_settings #程序入口 if __name__ == '__main__': #创建CrawlerProcess类对象并传入项目设置信息参数 process=CrawlerProcess(get_project_settings()) #设置需要启动的爬虫名称 process.crawl('quotes') #启动爬虫 process.start()
(4)获取数据
Scrapy爬虫框架,可以通过特定的CSS或者XPath表达式来选择HTML文件中的某一处,并且提取出相应的数据。
1、CSS提取数据
使用CSS提取HTML文件中的某一处数据时,可以指定HTML文件中的标签名称,示例代码如下:
response.css('title').extract()