1.实验目的和要求
1.1实验目的
爬取公共管理学院网站上的所有新闻,了解和熟悉网络信息采集的相关技术。
1.2实验要求
用任何可以用的方法,爬取四川大学公共管理学院(http://ggglxy.scu.edu.cn/)上所有的新闻,包括“新闻标题、新闻发布时间、新闻正文”三个字段。我们尝试过的方法有八爪鱼数据采集工具、Python爬虫代码。
2.实验环境
2.1八爪鱼数据采集工具
八爪鱼采集器是一个云采集服务平台,提供数据采集、数据分析等功能,是可视化的图形操作采集器。它的基础功能如简易采集、自定义采集等可以免费使用。本次实验使用的是八爪鱼7.0版本的自定义采集功能,采用本地采集的方法。
2.2使用Python scrapy框架爬取
本次实验使用的Python版本为2.7.14,安装完成Scrapy。采用服务器采集的方法。
3.实验方案
3.1八爪鱼采集器实验方案
3.1.2制作翻页循环和每条新闻链接的点击循环
3.1.3规定每个新闻链接的具体采集规则
3.1.4确定采集流程和数据
3.1.5采集工具结果界面
3.1.6错误报告及补充采集结果
经过我们的检查,错误报告中的网页一共有四种类型:
A. 链接网页内部还有嵌套链接,如“120周年校庆”等专题网页链接;
B. 其他格式的网页,如视频、图片、外部网站的链接等。
C. 网页出错,无法打开;
D. 是单独的文章,但可能由于系统出现问题或者文章格式不同(没有标题等)的原因,没有爬取下来。
我们对出错的每个网页链接进行了单独的第二次数据采集,其中图片、视频等B类格式的网页没有进行采集,最终采集得到的数据结果导出的excel表格部分截图如下:
以上为八爪鱼的部分
3.2使用Python scrapy框架爬取实验方案
3.2.1云服务器配置:为Python安装scrapy
(1)检查当前服务器是否配置了scrapy
(2)退出Python交互,使用yum安装scrapy和部分依赖。
经查询, 解决方法为:
vi /usr/libexec/urlgrabber-ext-down
把头部的python改成和/usr/bin/yum中一样的
修改完成后,再次使用yum安装scrapy:
3.2.2检查scrapy安装
进入Python交互环境,import scrapy enter,发现引用成功,退出交互环境。
scrapy version enter
版本信息查看成功。
至此,云服务器上配置Python scrapy成功。
3.2.3编写代码并进行调试
根据之前八爪鱼的经验可以看出,我们需要采集的实体共有三个:标题、日期和正文(另有一个实体为图片,暂时不做要求)。
scrapy startproject ggnews enter
cd /ggnews/ggnews enter
编写ggnews.py
3.2.4输入命令进行爬取,得到数据
输入scrapy crawl ggnews -o ggnews.xml
出现以下错误
出现了报错,但显然我们代码里面是有items这个类的。经过查询,这个错误用简单一句话来描述就是: 爬虫的名字跟项目的名字一样,导致最终导入的时候出错。
修改爬虫名字为spidernews.py。虽然名字长了一点,但是看起来很容易理解。
再次执行代码,得到文件ggnews.json
发现初次爬取的结果为Unicode编码,并不是理想的中文格式。经过查询,需要修改pipelines.py和settings.py这两个文件,使得输出的结果为中文格式。
3.2.5修改pipelines.py和settings.py文件
3.2.6解决缩进问题
修改完成之后再次运行命令scrapy crawl spidernews。又出现了新的问题:
经过查询,这是缩进的问题。Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中。最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分别的。在编译时会出现这样的错“IndentationError:expected an indented block”说明此处需要缩进,你只要在出现错误的那一行,按空格或Tab(但不能混用)键缩进就行。
修改完成,再次运行命令
得到理想的结果。
至此,使用Python scrapy框架进行爬取的过程结束。
4.经验总结
4.1八爪鱼采集器的经验总结
经验总结
由于本次实验只使用了数据采集的功能,因此评价和总结只针对数据采集方面的功能。八爪鱼让数据采集可视化,在完全不懂爬虫代码的情况下,八爪鱼是一个比较方便的网络数据采集工具。根据使用经验,它对公共管理学院网站新闻的爬取速度大概是29条/分钟,数据可以导出为excel、CSV等格式。
但是,它也有一些使用限制。首先是费用方面,它的数据导出是需要积分的,每10条数据一个积分,单次不足10条按10条算,用户首次注册后,它会赠送2000个积分;在采集数据量很小的情况下,可以免费使用,但是在采集数据量很大的时候,需要支付一定费用才能导出数据。其次是使用方面,由于八爪鱼是已经编写好的采集工具,因此在采集数据时使用会受到一定的限制,可能不像直接使用代码一样可以比较自由地规定采集数据的规则细节(比如采集时间段、采集时长等)。
4.2Python scrapy的实验总结
本次实验共爬取到407条数据,然而学院新闻网站上共有458篇新闻。为什么会缺少了51篇,我们到现在还没有找到答案,希望在接下来的学习中可以解决这一问题!在数据采集的过程中,爬取数据的规则和方法是最最最重要的部分,一定要充分利用浏览器的开发者工具,保证路径的严格正确;此外是编码问题和分页问题。由于刚刚接触python,对python的要求还不是很熟悉导致了修改时间很长,在接下来的学习中要尽快适应python的规则。另外还有有足够的耐心和细心,这样才能养出好的爬虫。