scrapy分页抓取网页(分布式网络新闻抓取系统设计与实现的项目介绍(一))
优采云 发布时间: 2021-11-25 04:21scrapy分页抓取网页(分布式网络新闻抓取系统设计与实现的项目介绍(一))
1 项目介绍
本项目的主要内容是分布式网络新闻采集系统的设计与实现。主要有以下几个部分介绍:
(1)深入分析网络新闻爬虫的特点,设计分布式网络新闻爬虫系统爬取策略、爬取字段、**页面爬取方法、分布式结构、系统监控和数据存储六大关键功能。
(2)结合程序代码的分解,讲解分布式网络新闻爬虫系统的实现过程。包括爬虫编写、爬虫规避、**页面数据爬取、分布式爬虫部署、系统监控,一共六项内容,结合实际定向抓取腾讯新闻数据,通过测试测试系统性能。
(3) 规划设计一个数据处理模块,包括数据清洗、代码转换、数据分类、对象添加等功能。
分布式网络新闻抓取系统的设计
2.1 整体系统架构设计
系统采用分布式主从结构,设置1台Master服务器和多台Slave服务器。Master管理Redis数据库,分发下载任务。Slave 部署 Scrapy 来抓取网页并解析提取项目数据。服务器基础环境为Ubuntu操作系统,Master服务器安装Redis数据库服务器和Graphite,Slave安装Scrapy和Redis客户端。系统按功能可分为两大模块,一是数据采集模块,二是数据处理模块。数据抓取模块包括浏览器调用、网页下载、字段提取、爬虫规避、数据存储和系统监控六大功能;数据处理模块包括数据清洗、对象添加、
2.2 爬取策略的设计
本项目的网络爬虫采用深度优先的爬取策略,根据设置下载网页数据。网页链接处理流程如下:
1.手动设置初始下载地址,一般是网站导航地址。
2、爬虫开始运行,从初始地址抓取第一批网页链接。
3、爬虫根据正则表达式识别新链接中的目录页面地址和新闻内容页面地址,将识别出的新地址加入到下载队列中等待爬取。无法识别的网页地址被定义为无用链接并丢失。
4、爬虫从等待队列中依次取出网页链接进行数据下载和提取。
5.下载队列为空,爬虫停止爬行。
新闻网站的导航页数是有限的。这个规则决定了新闻导航页面的URL在一定的人工参与下可以很容易的获取,并作为爬虫系统的初始URL。
2.3 爬取字段的设计
本项目旨在捕捉网络新闻数据,因此内容必须能够客观准确地反映网络新闻的特点。
本文以抓取腾讯在线新闻数据为例,通过对网页结构的分析,确定了一个两步抓取的过程。第一步,抓取新闻内容页面,获取新闻标题、新闻来源、新闻内容、发布时间、评论数、评论地址、相关搜索、用户还喜欢的新闻、点赞数。第二步在获取评论地址后,抓取评论页面,获取评论者ID、评论者昵称、评论者性别、评论者所在位置、评论时间、评论内容、单条评论支持人数、评论回复数单条评论。
2.4 **页面爬取方法设计
腾讯新闻网页使用Java Script生成**页面内容。一些由JS事件触发的页面在打开的时候内容会发生变化,有的页面没有JS支持根本无法运行。一般爬虫根本无法从这些网页中获取数据。解决JavaScript **页面爬虫问题有四种方法:
1.编写代码模拟相关JS逻辑。
2. 调用一个带接口的浏览器,类似于各种广泛用于测试的,比如Selenium等。
3、使用无界面浏览器,各种基于Webkit的,如Casperjs、Phantomjs等。
4、结合JS执行引擎,实现轻量级浏览器。
由于本项目是基于Python为主要语言编写的,所以使用Selenium来处理JS动态新闻页面。其优点是简单易行。使用Python代码模拟用户在浏览器上的操作。首先将网页加载到浏览器中并打开,然后从浏览器缓存中获取网页数据,传递给蜘蛛进行分析提取,最后将目标数据传递给项目通道。
2.5 Crawler 分布式设计
Redis数据库用于实现分布式爬取。基本思路是将Scrapy爬虫获取到的url(请求)放在一个Redis Queue中,所有爬虫也从指定的Redis Queue中获取请求(url)。Scrapy-Redis 默认使用 Spider Priority Queue 来确定 URL 的顺序。这是一种由有序集合实现的非 FIFO、LIFO 方法。
Redis 存储了 Scrapy 项目的请求和统计信息。根据这些信息可以掌握任务状态和爬虫状态,在分配任务时平衡系统负载,有助于克服爬虫的性能瓶颈。同时,利用Redis的高性能和易扩展的特性,可以轻松实现高效下载。当Redis存储或访问速度遇到问题时,可以通过增加Redis集群和爬虫集群的数量来提高。Scrapy-Redis分布式解决方案很好的解决了爬行中断和重复数据删除的问题。爬虫重启后,会针对Redis队列中的URL进行爬取,爬取到的URL会被自动过滤掉。
2.6 基于Graphite系统的监控组件设计
使用Graphite监控系统的运行状态,实现了分布式系统的statscollector,将系统的stats信息以图表的形式动态实时展示,即实时监控。Graphite监控的信息包括:系统下载信息、日志信息、文件计数、调度信息、爬虫运行信息、爬虫异常信息、文件数、获取的item数、最大请求深度、收到响应数等。
2.7 数据存储模块设计
Scrapy支持json、csv、xml等文本格式的数据存储。用户可以在运行爬虫时进行设置,例如:scrapy crawlspider -o items.json -t json,也可以在Scrapy项目文件的Item Pipeline文件中定义。此外,Scrapy 提供了多种数据库 API 来支持数据库存储。如Mongo DB、Redis等。 数据存储分为两部分,一是网页链接的存储,二是项目数据的存储。网页链接存储在Redis数据库中,用于实现分布式爬虫的下载管理;项目数据包括新闻数据和评论数据,以JSON格式保存为文本文件,方便处理。存储评论数据时,以评论url中收录的评论ID命名。通过这种方式,
3 项目总结
以上就是分布式网络新闻爬取系统的系统设计部分。分布式设计是因为单个爬虫的爬行量和爬行速度的限制。整体设计部分如上图所示。