【《新闻爬虫的具体设计及其实现分析》22000字(论文)】_第1页
【《新闻爬虫的具体设计及其实现分析》22000字(论文)】_第2页
【《新闻爬虫的具体设计及其实现分析》22000字(论文)】_第3页
【《新闻爬虫的具体设计及其实现分析》22000字(论文)】_第4页
【《新闻爬虫的具体设计及其实现分析》22000字(论文)】_第5页
已阅读5页,还剩37页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新闻爬虫的具体设计及其实现分析目录TOC\o"1-3"\h\u31356新闻爬虫的具体设计及其实现分析 -1-31253摘要 -2-7772第一章绪论 -3-188831.1开发背景及目的 -3-149881.1.1开发背景 -3-72071.1.2研究目的和意义 -4-298641.2国内外相关研究现状 -5-265251.2.1国内研究现状 -5-317451.2.2国外研究现状 -6-38301.3研究内容和方法 -7-240401.3.1研究内容 -7-125621.3.2研究方法 -8-126051.4本章小结 -9-22198第二章系统开发知识准备 -9-316332.1Python -9-306162.2MySQL -11-11302.3词云图 -12-228341)教育: -12-121172)文化: -12-73973)电脑程序: -12-317362.4CSV -13-164922.5结巴分词 -13-8292.6正则表达式 -15-109292.7网页蜘蛛 -17-172283)匹配数据 -17-288034)数据存储 -17-225192.8Requests库 -18-6077除此之外,Resquests库还支持了多种常用的连接异常。 -18-275742.9本章小结 -19-5338第三章系统需求分析 -19-198253.1系统可行性研究 -19-240843.1.1技术可行性分析 -19-147563.1.2经济可行性分析 -20-21673.2用户对象分析 -20-65673.3功能需求分析 -20-180653.3.1搜索并爬取新闻 -21-210143.3.2数据清洗与存储 -21-75933.3.3可视化 -22-168253.4本章小结 -22-3489第四章网络爬取系统设计 -23-236344.1数据库结构设计 -24-22864.2系统功能模块设计 -24-269444.2.1数据获取功能模块 -25-177384.2.2可视化功能模块 -28-276094.3本章小结 -29-29459第五章网络爬取的实现 -30-112345.1数据获取模块 -30-62535.2数据可视化模块 -36-180735.2.1CSV展示 -36-303655.2.2词云图展示 -37-136045.3本章小结 -40-21320第六章总结与展望 -40-233966.1全文工作总结 -40-31766.2未来展望 -41-摘要本文的研究对象是新闻数据爬取系统,主要负责如标题、作者等新闻信息数据的收集与爬取。本文通过爬虫原理、业务流程和新闻分析系统的需求等多个方面,并结合相关领域的技术与工具,详细描述了新闻爬虫的具体设计及其实现过程。本文所描述的新闻爬虫其数据来源是新浪新闻,采用Python语言编写了一个针对新浪新闻中心的可扩展的网络爬虫。使用Urllib将新闻搜索关键词(中文)转换为网页编码以拼接得到初始查询页链接;使用Requests库进行HTML的相关操作(如发送网页请求);使用正则表达式进行网页的解析以及文本的匹配;使用结巴分词将爬取得到的新闻正文进行分词操作;使用Collections库进行字典的初始化,以便于词频统计;使用Wordcloud来绘制词云图。本系统的主要功能是:通过检索用户输入的关键词搜索相关新闻,并且利用爬虫工具获取需要的新闻数据(包含以下六个字段:新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要以及新闻正文),进行数据清洗之后将有效数据保存于数据库中,同时生成可以使用Excel打开的CSV文件以便于用户查阅,然后再将新闻信息以及新闻分析的结果进行分词,对高频的有效分词进行绘制,得到词云图,方便用户清晰直观、简单方便的了解舆论热点。关键词:词云图,Python,网络爬虫,数据爬取,新闻热点绪论本章主要对本文的研究背景及其研究意义进行了说明。同时简要阐明国内外对于新闻热点爬虫系统的研究现状。并介绍了研究内容、章节安排与研究方法。开发背景及目的开发背景随着网络的迅速发展,互联网成为大量信息的载体。这些数据当中往往存在在非常大的价值等待人们去发现。然而,在信息规模如此膨胀和信息源如此多样的时代,若不依靠计算机程序完成对海量数据的采集,由于其过程纷繁复杂,效率低下,采集成本大大增加,信息的质量也难以得到保证。对于结构化的数据采集,使用爬虫技术是一个非常高效的选择。目前,对于全球大多数互联网用户来说,搜索引擎是其准确获得所需要信息或者知识的最有效的工具。但是,摆在各大搜索引擎都会面临一个问题,抓取是一个消耗不容小觑,但其又是不可或缺的一个部分。在衡量搜索引擎时,查全率便是最重要的性能指标之一。提高查全率的最重要的工具——网络爬虫(WebCrawler)。从网络爬虫的工作原理来看,它就像一只蜘蛛一样,把世界上的各个网址视为结点,各个网址之间的链接视为蛛丝,通过在互联网这一张浩瀚无垠的巨网上爬行。访问各个网站,在它们之间来回穿梭,搜集网页内容,寻找并下载自己需要的数据。所以说,“网络爬虫”是一个非常生动形象的名字。也正是因为爬虫在搜索引擎中的独特地位,其效率、特性和抓取的质量就显得尤为重要。新闻是人们获取并理解日常生活中各项信息的主要手段。随着信息技术的飞速发展,最具潜力与活力的媒体毫无疑问就是互联网,并且互联网已成为信息公开的主流,其已然成为反映民生百态的最为重要的载体之一。多媒体,多渠道,高速度、交互式等已然成为在线新闻的代名词。它打破了传统的新闻交流概念,并为观众提供了视觉、听觉等多方面的新体验。通过显著降低信息的厚度,将杂乱的新闻进行重组,使得人们可以非常及时地获得需要的新闻信息。但是,网络上也有着众多的新闻中心网站,新闻信息过多,造成新闻信息严重负载。针对此问题,设计一个可以根据关键词进行新闻信息爬取的系统就显得尤为重要。研究目的和意义本文研究的目的在于开发一个可靠、高效的定向新闻爬虫。使用Python来编写爬虫程序令工作变得更为快捷、高效。随着大数据时代的到来,数据的价值越来越受到人们的重视。2015年,马云就曾在某次公开演讲中说过:10年20年以后,这世界最珍贵的资源、最稀缺的资源,不会是石油,一定是数据。在纷繁复杂的数据种类中,在线新闻数据更是具有十分诱人的开发和利用价值。因此,本文通过研究爬虫技术与算法,定义爬虫解析规则以及对网页内容的循环爬取,获取海量的新闻数据。该新闻爬虫系统能够使用户更加高效、可靠、准确地获取尽量全面的网站数据,使用户更加迅速、全面、准确地掌握新闻热点动态,对于降低信息获取的成本、提高对于一些小概率事件或紧急状况的快速反应与应对能力,更及时、全面的了解全国乃至世界各地的实时新闻信息具有非常重要意义。同时,解析所有相关新闻并生产词云图,对文本中出现频率较高的有效实词(即去除了无实意的停用词之后的分词)进行排列组合,按照词频高低来确定字词大小,以提供阅读整个信息的重点,揭示关键概念,使得阅读者只要看一眼生成的词云图就可大致了解当下新闻的主要内容。并且可使用丰富多样的展示形式,以更为高效、新颖、有趣的方式呈现给读者。综上所述,本文主要进行了以下几个方面的工作:1)使用python开发了一个针对新浪新闻的网络爬虫,该爬虫程序能够按照关键字搜索新闻并抓取相关信息,抓取的信息包含以下六个字段:新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要以及新闻正文。2)采用正则表达式进行文本匹配,把匹配到的结果存放到MYSQL数据库中,同时进行数据清洗,去除重复新闻与空新闻,并生成可以用Excel打开的CSV文件,以便于简洁直观地查看新闻内容。3)对新闻正文的内容进行分词处理则采用的是可对自然语言进行处理的结巴分词库。得到分词后计算各个分词的出现次数,即词频,然后根据词频进行排列得到排序后的分词,最后对这些分词进行可视化,即生成词云图。国内外相关研究现状《互联网络发展报告》对于我国的互联网发展状况进行了全面的分析和反映。在该报告中可以看出,一方面,在信息时代,互联网上面有着规模异常庞大的数据信息。但另一方面,面对着庞大的互联网,想要通过人工操作的方式来收集数据信息也是困难重重、难上加难。自2011年起,网络爬虫技术开始渐渐流行起来,逐步地被人们所重视,近几年更是成为最炙手可热的技术之一。爬虫的开源框架也在不断增加,使得爬虫软件的开发门槛变得越来越低,人们可以利用爬虫更加方便地获取所需要的信息。2009年以来,人们变得越来越重视网页蜘蛛,网页蜘蛛也越来越流行,并且已成为近年来最为受欢迎的信息获取工具之一。随着各种开源框架的百家争鸣,网页蜘蛛的开发也变得愈发方便、简单,使得人们获取所需数据变得更为快捷。国内研究现状目前网络数据采集主要是综合运用垂直搜索引擎技术的网络蜘蛛(或数据采集机器人)等技术来完成。现阶段在国内从事“海量数据采集”的企业很多,它们大多是利用这种垂直搜索引擎技术来实现。还有一些企业实现了多种技术的综合运用,例如:“火车采集器”采用了垂直搜索引擎+网络雷达+信息追踪与自动分拣+自动索引技术,将海量数据采集与后期处理进行了结合;深圳视界信息技术有限公司的“八爪鱼采集器”以完全自主研发的分布式云计算平台为核心,能在短时间内从不同的网站或者网页获取大量的规范化数据,帮助客户实现数据自动化采集、编辑、规范化,从而削弱对人工搜索及收集数据的依赖。除了以上提及的商业应用外,国内不少学者也在进行数据采集方面的研究。Scrapy是一个十分流行的网页蜘蛛框架。陕西省电力公司的杜鹏辉、仇继扬、彭书涛等人[6]则主要分析了如何在Python语言下使用Scrapy,介绍了Scrapy如何安装和调用,并通过实例演示了如何分析数据源并编写相应的爬虫项目获得数据,最后还将所获得数据转化为了可持久化保存的文件,XUPT的邓教授[1],就将扩展为分布式架构。邓教授通过分析深层网络的特点,制定了专门针对深层网络的数据爬取方法。并应用于他发分布式微博采集方案的研究中。在“京东商城舆情分析系统”中,UEST的刘教授[2,3]设计了一种可以从众多数据源中进行爬取的网络爬虫。刘鹏飞对数据来源、爬取深度、爬取类别都进行了非常细致地设置。武汉理工大学的万教授[4]提出了基于哈希函数的分布式爬行系统的url分配算法。他利用了哈希函数来进行任务分配,保证了系统的稳定性与负载均衡。WUT的曾教授[5]模拟weibo的登录以访问登录之后的网址。进而获取网页各项所需的weibo数据并将其存储起来。为了使网页蜘蛛不被新浪应用程序接口的限制拦截在外(即反爬虫),使用了页面分析技术,从而抓取到数量更多,质量更好的数据。随着技术的发展,有些学者也提出了自适应的具有学习能力的主题爬虫[7],它能够评估已采集的信息,进行反馈,及时的改变爬行策略。GXNU的仲教授、金教授等人[8]就给出一种类似主题爬虫方案。它具有两个分类器,其一是对基础网页进行分类,能够根据主题相关性对以下载的网页进行分类。另一个则可以自适应能力的对url进行分类,它可以用已抓取的信息训练分类模型,能够自动采取不同的方式来对网页进行评估,判断这个网页是否需要爬取。新闻搜索方面的研究则包括:SJTU的林教授[9,10]建立了一个支持内容解析和存储管理的,以在线新闻检索为中心的分析系统。这个分析系统可以对特定的研究领域或模块,进行精确、迅速、完备的新闻爬取。SCUT的任教授[22]针对教育方面的新闻的特点,在研究了大量的数据采集策略之后,提出了一种基于隐马尔科夫统计模型(HiddenMarkovModel,HMM)和启发式规则的数据采集策略。该方法应用于一个针对教育新闻网页进行数据采集的原形系统。并且通过众多的测试与实验,给出了所提出的数据采集方策略的有效性。国外研究现状爬虫,又称网页蜘蛛。英文名有Robots、Wanderers等等。它是一个可以识别url并自行对其进行访问,以及爬取相关数据的程序[11]。BrettsiMasmino教授认为网页蜘蛛的基本工作流程总体上分为三步[12]:1)通过设置、拼接或者自动生成等多种方式获得初始爬取链接,并将其放入待爬取的链接列表之中。2)从待爬取的链接列表之中取出链接并向服务器发送http请求,经过三次握手等过程之后访问该链接,访问之后寻址新的链接地址。然后将此已访问过的链接地址放入已抓取列表之中。3)将上一步中新获得的链接地址放入待抓取链接列表之中。网页蜘蛛会按照预先设定好的采集策略进行数据采集。Garcia.MolinaH教授,ChoJ教授[13]首先提出了分布式网页蜘蛛的分类方法和效能评估策略。他们详细地比较了分布式网页蜘蛛与单机结构的网页蜘蛛的效率和稳定程度。他们认为基于分布式的网页蜘蛛具有较高的扩展性和稳定性高等优势。这些都为日后的分布式网页蜘蛛大放光彩铺好了前行的道路。GoogleCrawler[14]毫无疑问是目前世界上规模最大、性能最优秀的非定向网页蜘蛛之一,可以向用户提供大量下载了的网页。但随着互联网技术的日新月异,通用爬虫出现了一些问题,例如有限的服务器与无限的网络资源的矛盾扩大[15]。对此谷歌公司也有一些调整,其主要包括两方面:一是采用MapReduce[16]并行的方式处理网页;二是使用分布式数据存储系统,如BigTable[17]。ContentGraber[18]是一款用于网页抓取和网页自动化的网页内容采集工具,它可以从几乎任何网站中提取内容,并以用户选择的格式(包括Excel,XML,CSV和大多数数据库)将其保存为结构化数据。P.M.EDeBra教授等人提出的鱼群搜索算法[19]将网页蜘蛛在各个网页之间不断爬取视为是一个在觅食的鱼群。将因特网视为大海,将其中待爬取的有效数据信息视为要寻觅的食物。将每个网页链接视为一条鱼,将检索的宽度视为鱼的后代的数量。当爬取到了有效的数据信息的时候,即有物可食,后代的数量就会有所增加,进而提高了爬取的能力与效率。HatiKumr教授[20]提出的数据检索策略则更为独特。它是一种基于网页分割的策略,这里的网页分割是根据网页中的视觉信息对网页进行分割的。在获取网页分块之后进行相关的解析和优化,以获得更大的爬取范围以及更为优质的网页资源。研究内容和方法1.3.1研究内容本文详细介绍了在线新闻数据采集系统的设计与实现过程,新浪新闻中心是其主要数据源。本系统的主要工作流程是:通过检索用户输入的关键词并搜索相关新闻,并且利用爬虫工具获取需要的新闻数据,进行数据清洗之后将有效数据保存于数据库中,同时生成可以使用Excel打开的CSV文件以便于用户查阅,然后再将新闻信息以及新闻分析的结果进行分词,生成词云图。文章结构安排如下:,绪论。主要对本论文的研究背景与意义进行了简要阐明,同时对于网页蜘蛛系统的国内外研究现状进行了简要说明。介绍了网页蜘蛛的出现和发展历程。介绍了网页蜘蛛的基本架构及运作原理。介绍了网页蜘蛛的诸多使用场景。介绍了主要的网页抓取策略。并介绍了本论文的主要内容组成以及研究方法。,系统开发知识准备。简要说明了与本文中的在线新闻数据采集系统开发相关相关技术和原理知识。主要包括词云图、结巴分词、爬虫技术、Python3、MySQL数据库、CSV、正则表达式以及Requests库等原理与使用方面的相关知识。并简要说明了系统开发过程中使用到的一些工具。,系统需求分析。首先从技术和经济的可行性这两个方面对该在线新闻数据采集系统的可行性进行了分析,以确保可以成功顺利地完成系统开发。最后总结出了相应的功能需求。,系统总体设计。首先进行了数据库结构的设计。其次对系统功能模块进行了总体设计,并按照功能的不同,将其划分为采集功能模块和可视化功能模块。其中,数据获取功能模块又分为数据爬取子模块、数据清洗子模块以及数据存储子模块这三个子模块。这些工作为该在线新闻数据采集系统的后续设计与开发工作打下坚实的基础。,说明本在线新闻数据采集系统的设计与开发工作。详细设计了功能模块及其子模块的并完成了系统的开发实现工作,对于数据获取模块以及数据可视化模块进行了详细的设计实现和功能说明。,对本次毕业设计项目(网络爬虫获取海量数据的研究与实现)进行了项目总结。同时,对该项目日后的研究方向进行了思考,并提出了些许想法与建议。1.3.2研究方法本系统选择的数据源是新浪新闻中心,新浪网新闻中心是本文的新闻爬虫的主要数据来源,新浪是我国的四大门户网站之一,新浪新闻更是其最为主要的产品服务之一。其内容包括国际时事、各国的突发新闻、体育竞技新闻、娱乐文艺新闻、科技新闻等诸多板块,内容丰富详实。而且,新浪新闻中心的反爬虫策略较为简单,综上所述,新浪新闻中心是本系统的一个较为理想的数据源。本系统参考网上开源的网页蜘蛛程序以及各种网页蜘蛛相关的书籍、视频课程等信息,学习了解Python编程的相关知识以及网页蜘蛛的基本原理与运行机制。使用网页蜘蛛对新闻链接进行访问与解析,使用正则表达式匹配并采集标题、新闻上传的时间、新闻来源(作者)、摘要、文章正文等相关信息,采集之后再进行数据清洗并存储。之后生成CSV文件以及词云图,便于用户清晰直观的了解新闻内容。本章小结主要对本论文的研究背景与意义进行了简要阐明,同时对于网页蜘蛛系统的国内外研究现状进行了简要说明。介绍了网页蜘蛛的出现和发展历程。介绍了网页蜘蛛的基本架构及运作原理。介绍了网页蜘蛛的诸多使用场景。介绍了主要的网页抓取策略。并介绍了本论文的主要内容组成以及研究方法。第二章系统开发知识准备本章节简要介绍了进行本次新闻爬虫系统开发所需要的相关理论和技术,这些关键技术的学习和掌握为接下来的系统分析及设计实现提供了坚实的理论基础。2.1PythonPython是一种简洁,清晰、易于理解的脚本语言。也正是因为它的这些特性,Python才能受到那么多使用者的拥护。虽然,Python一开始在shell中使用较多,但随着升级换代以及各种方便好用、功能强大、简单易上手的库的增加,Python也时常用于编写一些独立性强的软件,用途也日渐丰富了起来。Python在设计的时候,如果面临多种选择,程序员们一般会拒绝花里胡哨的编写方法,而选择使用清晰的、基本不会出现误解的编写方法。其开发思想可以概况为“onequestion,oneway”,即只需要存在一种完美的方案来完成某一个特殊的、要解决的事情。这和Perl的核心理念“我们有更多的方法去解决这个问题”恰恰相反。Python有一个令部分初学者比较矛盾的地方,就是它的缩进原则。这会使得一些不习惯于缩进的程序员(例如,if之后不添加空格)编写程序的时候容易出现一些低级的编译错误。Python还有另一个和另外几种跨平台的计算机程序设计语音的差异,这个差异曾经应起过非常广泛的讨论。那就是:确定一个模块的边界是由各行的第一项在该行的位置。但例如Java等语言,它们确定模块的边界则是使用“{”和“}”,而非字符的排列方式。这一差异被一些人视作是编程语言的升华。有一说一,Python的这些特性对于使得代码更为简洁与清晰有着非常显著的帮助。需要注意的是,本系统使用的计算机程序设计语言是Python3。随着2020的到来,Python2将不再维护,Python3崭露头角,尽管二者的差别并不是很大。Python还具有以下特性:1)编程效率高Python有着许多功能强大、方便好用、功能强大、简单易上手的库。想通过计算机实现任何功能,Python官方库里基本上都有相应的模块进行支持。可以直接下载并调用,而且可以在基础库的基础上再进行开发,大大降低开发周期,避免重复开发的问题。2)代码美观、清晰、方便Python对于一些从未学习过编程的新手来说是非常友好的,非常易于学习掌握。Python3的设计哲学便是“美观”、“清晰”、“方便”。故Python3的程序时常令人产生一种十分清爽的感觉。不仅如此,未来如果更深的将Python研究下去,亦可用于开发一些复杂度高的软件。图2-1Python的设计哲学3)高级语言Python作为高级语言大家族的一员,当人们在使用它进行软件开发之时,不需要过多地思考一些底层的细节问题(例如内存管理问题)。4)可移植性Python3已经被移植到许多平台上。只需要对其进行小范围的修改,就几乎可以在全部的操作系统中工作。5)易拓展性如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。6)可嵌入性

如果想在由C语言或者其他语言编写的软件中提供一些脚本,则可以将Python3代码植入到该程序之中。7)易于编写网页蜘蛛程序Python有着非常多的成熟的网页蜘蛛框架。而且也易于使用多线程技术。网页蜘蛛就是一个非常经典的多任务程序,时常需要长时间的等待。多线程技术以及好的网页蜘蛛框架则可以很好地提高网页蜘蛛的运行速度。当然,有优点就会有缺点,Python3相较于其他程序开发语言的缺点就包括以下几点:1)运行效率低下。Python程序的运行效率相比java或者C++差了不是一星半点,尤其是在一些复杂度较高的大型程序的时候。也正是由于这个原因,很多大型软件不利用Python进行项目开发,或者仅仅用于编写一些脚本程序。不过在开发一些小规模的项目的时候,这份差异并不明显,不会耽误项目的开发。2)加密十分困难。由于其解释器是开放的等等原因,致使其程序不能进行加密处理,无法保证程序的安全。只能采用诸如使用Cython等方法进行加密。但是这两个缺点并不过多的影响本系统的开发与使用,故经过多方面的综合考虑之后选择使用Python进行系统开发。2.2MySQLMySQL是由其同名企业研发的。在RDBMS之中,鲜有比mysql更优秀的了。RDBMS提高数据存取的速率的方法是在不同的表中存储数据信息,而不是把它们都置于一堆。MySQL软件采用双重Lisense策略,可以分为普通版本和付费版本,尽管mysql会有一些这样那样的不足,但是由于其不太占空间、存取迅速、使用成本较小等特点,一般复杂程度不是很高的软件的开发都会选择MySQL,而且其所包含的功能可以很好的满足它们的需要,很好的压缩了软件实现与维护的成本。除此之外,MySQL数据库管理系统具有以下系统特性:1)常见的OS基本都支持。2)有非常好用的管理工具。3)有丰富的数据库连接方式。4)为多种计算机程序设计语言提供了应用程序接口。5)支持多种数据保存的方式。6)支持充分利用中央处理器的多线程技术。7)可以嵌入其他程序之中,也能单独的充当一个程序。8)多种常见语言都能得到支持,例如西班牙语、阿拉伯语等。2.3词云图美国NWU的副教授RichGordon于24年前提出了“云图”的概念。他曾是一个知名杂志的一名编辑,还担任过记者、导演等职务,对于媒体行业有着许多非常独到的见解。为了更好地促进新媒体行业的发展,他提出了“云图”的概念。“云图”是指形成“分字云”或“分字渲染”,并且以可视化的方式展现网络新闻中最为常见的几个或者多个分词。云图使您的Web浏览器可以稍微过滤一下文本,并通过过滤多个文本信息来协助阅读者了解文本的大概内容。词云图被广泛应用于以下3个方面1)教育:云图是用于学习第二语言的开创性的程序。这是一种极为出色的学习方法。比方说在记忆新单词时,经过概率统计和分析后,将自动分析相关词汇表并形成云图,以提供给外语学习者,使得他们更好的掌握自身的薄弱之处。老师们可以利用词云图,将某一文章或者段落的重点提取出来,有助于学生更好地掌握文章或者段落的中心思想。且这种新颖的学习方法或学习模式更为有趣,更符合孩子们的兴趣与口味。在教育领域内,云图有很大几率会收到大力推广,并得到更为广泛的应用。2)文化:在浏览文章的时候,云图可以提供更为简洁清晰的指引,协助阅读者了解文本的大概内容。与此同时,纷繁多样的云图也给予了人们无限的联想可能,提高了趣味性。也可以将云图当做印花图案放置在衣服上,鲜明独特。3)电脑程序:Worldle是非常成熟的词云绘制软件之一。您可以选择其他背景,排列方式以及色彩。而且可以将其保存并冲洗出来,与伙伴一起享受保存与冲洗的乐趣。在进行绘制的时候,参数设置也有一些要注意的地方,不然容易出现错误或者隐患。例如停用词只能采用集合等。一般来说,生成一个的词云图只需要如下三个步骤:1)配置对象的参数2)加载词云文本文件3)输出并保存词云文件。常用的配置参数如下[16]:width:指定宽度,默认值为400;max_font_size:指定最大的字号;height:指定长度,默认值为200;min_font_size:指定最小字号,默认值为四号;font_step:指定各个单词之间的距离,默认为1个单位;font_path:指定字体的路径,默认为空;max_words:指定最多的单词个数,默认值是200个单词;stopwords:指定剔除词列表,一般是从使用开源的剔除词;mask:指定词云的形状,默认为长方形;background_color:指定背景,默认值为黑。2.4CSV即符号分割值,因其分割符号一般是逗号“,”,故时常又被称之为逗号分割值。其功能主要是可以将表单数据信息以纯文本的方式另存为CSV。由预设的分割字符对CSV进行分割,得到一个表格。该表格可以使用我们非常熟悉的EXCEL进行各种操作,例如关键字搜索,对某一列进行升序降序排列等。虽然CSV是没有一个全球共用的协议的,但是由于其操作简单、方便,故在许多领域仍然可以看到它的身影,其应用之广泛令人叹为观止。传输表格就是其中最为典型的应用场景之一。2.5结巴分词在Python之中,split()是一个非常好的文本切片函数,尤其是切片对象为英文字符串的时候。例如下述代码中的英文切片。>>>str=“hetookthatappleandbitdown”>>>str.split()[‘he’,‘took’,‘that’,‘apple’,‘and’,‘bit’,‘down’]但是,若切片对象文本采用的是中文,例如“他拿起那儿个苹果并且一口咬了下去。”,split方法此时就显得独木难支、力不从心了。那是因为通过“”、“,”或者“.”等等就可以对英文单词进行切片,而汉语之间往往是没有或者很少分割符号的。所以说,想得到这句话中的分词切片属实不易,必须另辟蹊径。然而,伴随着这些年来NLP的迅猛发展,例如THULAC、HanLP等等中文分词软件也是百花齐放、百家争鸣。本文使用的是结巴分词。在结巴分词中,如果我们想对“到森林公园玩”这句话进行分词,“到”这个字没有前缀,可以视为一个词。对于“森”这个字,却有“森”、“森林”、“森林公园”三个分词。对于“林”这个字,也只有一个分词,就是它自己。以此类推,可以对着句话进行如下9个分词:“到”、“森”、“森林”、“森林公园”、“林”、“公”、“公园”、“园”、“玩”。在jieba中,以每一个单字在这一句话中的位置为键,以此来标记。例如在“到森林公园玩”这句话之中:0:[0]1:[1,2,4]2:[2]3:[3,4]4:[4]5:[5]对于1:[1,2,4],表示以1号位为头部,连续到一、二、四号位都能构成一个中文分词,就是1~1,1~2,1~4,即“森”,“森林”,“森林公园”这三个词。对于2:[2],表示2号位的字,就是2~2,就是“林”;对于3:[3,4],表示以3号位为头部,连续到三、四号位都能构成一个中文分词,就是3~3,3~4,即“公”,“公园”。对于每一种分词方式,都将相应的首尾位置相连,例如,对于一号位的“森”,可以将它与二号位的“林”,二、三、四的“林公园”相连接,最终构成一个如图2-1的有向无环图。图2-1有向无环图按照图2-1所示,其中有4条路径,也就意味着有4种不同的解析结果。#路径10->1->2->3->4->5#分词结果1到/森/林/公/园/玩#路径20->(1,2)->(3,4)->5#分词结果2到/森林/公园/玩#路径30->(1,2)->3->4->5#分词结果3到/森林/公/园/玩#路径40->(1,2,3,4)->5#分词结果4到/森林公园/玩之后再采用一系列的分析选择最有可能的结果,得到最终分词在本文中,我选取了结巴分词进行分词解析以生成词云图,主要基于以下考虑:1)讨论非常众多:在Github,CSDN等平台上的开源代码与博客数量众多,这非常有利于本人的学习、理解以及使用。有利于在系统开发的过程中出现bug时进行资料的查阅,以解决问题。2)功能十分强大:结巴分词除了文本词汇匹配与拆解之外,还包括了很多诸如关键信息解析等的功能。3)支持常见的计算机程序设计语言,扩展插件也十分丰富。4)安装、使用十分简单方便:采用如下方式即可安装结巴分词:pipinstalljieba而且结巴的应用程序接口较少,配置方面的操作也较为简单,方便快捷。2.6正则表达式常记为re,其功能主要是可以解析出符合某种预设条件的字符串,该字符串囊括了诸如二十六个字母的通用字符以及一些其他符号。这里介绍了一些常见的符号及其描述:\是指将下一字符标记为特殊字符。^是指匹配输入字符串的开始位置。$是指匹配输入字符串的结束位置。{m}是指匹配确定的m次。{m,}是指至少匹配m次。例如,“p{3,}”无法匹配“up”中的“p”,但能匹配“appple”中的所有p。*是指匹配子表达式(匹配次数大于等于零)。+是指匹配子表达式(匹配次数大于等于一)。.是指匹配除\n之外的任何字符。{i,j}是指最少匹配i次且最多匹配j次。例如,“p{1,4}”匹配的是“appppppppppple”中的前四个“p”?是指匹配子表达式(匹配次数非零即一),当其是在别的限制符之后,则表示的是非贪婪模式。(?=pattern)表示的是正向预查。(?!pattern)表示的是负向预查。i|j是指匹配i或j。“i|jk”匹配的是“i”或“jk”。“(i|j)k”则表示“ik”或“jk”。[efg]是指字符集合。匹配所包含的任意一个字符。[^efg]是指匹配未包含的任意字符。例如,“[^efg]”匹配的是“abcefg”的“a”。(pattern)是指匹配pattern并获取。(?:pattern)是指匹配但不获取结果。\b是指匹配一个单词的边界。\r是指匹配回车符。\d是指匹配数字字符。\n是指匹配换行符。\f是指匹配换页符。\B是指匹配非单词边界。例如,“yz\B”可以匹配“ayzb”中的“yz”,但无法匹配“xyz”中的“yz”。\t是指匹配制表符。\D是指匹配非数字字符。[a-z]是指在指定范围内的字符。[^a-z]是指不在范围内的字符。\s是指匹配任何空白字符。\S是指匹配任何非空白字符。\xn是指匹配十六进制转义值。\w是指匹配包括下划线的单词字符。\W是指匹配任何非单词字符。\v是指匹配一个垂直制表符。\num是指匹配一个正整数。同时,正则表达式还有以下特点:1)灵活性、逻辑性和功能性非常强。2)可以迅速地用极简单的方式达到字符串的复杂控制。3)对于刚接触的人来说,比较晦涩难懂。由于正则表达式的主要应用对象是文本,因此它在各种文本编辑器场合都有广泛应用,小到著名的编辑器EditPlus,大到MicrosoftWord、VisualStudio等大型编辑器,都可以使用正则表达式来处理文本内容。2.7网页蜘蛛网页蜘蛛是按照设定好的条件下载所需数据的一类程序。网页蜘蛛的基本工作流程包括以下4个部分:1)发起请求2)获取响应3)匹配数据4)数据存储从网页蜘蛛的应用角度来看,网页蜘蛛可以被分成三种:增量型网页蜘蛛、聚焦型网页蜘蛛和全网型网页蜘蛛。1)增量型网页蜘蛛主要特点是只从新生成的或经过修改了的网页进行数据采集,可以保证数据的有效性,很好地避免了重复数据的采集,减少网络、内存等资源的浪费,也提高了数据采集的效率。2)聚焦型网页蜘蛛顾名思义,这种类型的网页蜘蛛聚焦于某一特点领域或模块,很好地保证了采集到的数据与用户的需要想匹配,避免无用的数据,减少网络、内存等资源的浪费,提高了数据采集的效率。3)全网型网页蜘蛛一般就是指代类似于Google、Baidu的搜索引擎,能够对整个互联网的数据进行采集与分析。2.8Requests库Request是一个建立在urllib3之上的第三方库,但其现在已成为内置的模块,不再需要进行额外的安装了。而且相较于urllib3来说也更为快捷、方便。对应进行http的相关操作十分方便,极好地节约了系统的开发成本。下面简单介绍一下其中的7个常用的基本方法:1)request方法:创建请求,这是下列其他方法的前提。2)delete方法:提交删除请求。3)head方法:获取HTML网页头信息。4)post方法:提交POST请求。5)put方法:提交PUT请求。6)patch方法:提交修改请求。7)get方法:获取HTML网页。其中,最为常用的就是get方法,这是获取一个网页最简单的方法,例如r=requests.get(url),但是其完整使用方法则是:requests.get(url,params=None,**kwargs)这其中包含了三个参数:1)url:欲访问的页面链接。2)params:url中的额外参数。3)**kwargs:可对访问进行控制。get()返回的是response对象。其中,response对象某些属性非常有用,例如text属性可用于获取网页源码,为进一步使用正则表达式解析网页做了准备。以下为response对象的属性。1)status_code属性表示的是HTTP请求的返回状态。2)text属性表示的是HTTP的响应内容,即网页源码。3)encoding属性表示的是猜测的响应内容编码方式。4)apparent_encoding的是属性表示备选编码方式。5)content属性表示的是二进制形式的响应内容。除此之外,Resquests库还支持了多种常用的连接异常。表2-3Resquests库支持个六种常用的连接异常ConnectTimeout连接远程服务器超时Timeout请求url超时HTTPErrorHTTP错误异常urlRequiredurl缺失ConnectionError网络连接异常2.9本章小结本章介绍Python3,MySQL,词云图,CSV,结巴分词,正则表达式,网页蜘蛛和Requests库的相关知识,以及开发网络新闻信息数据收集系统所需的相关理论。我将简要介绍该技术。学习和理解核心技术为后续系统的分析、设计和开发打下了坚实的基础。第三章系统需求分析需求分析阶段的主要工作就是分析系统的用户所需要的是什么。分析软件需要面对的问题以及解决方法,明确系统的输入与输出。本章的系统需求分析主要从系统可行性研究、用户对象分析、功能需求这三个方面进行阐述。3.1系统可行性研究系统可行性分析是对欲开发的系统的可行性进行评估。评估对象包括了系统的功能、开销、规模、硬件、软件等方面,为系统的开发工作提供宝贵的建议。本小节主要分为技术可行性分析和经济可行性分析。3.1.1技术可行性分析本系统的实现主要依赖开源软件。采用Python语言编写了一个针对新浪新闻中心的可扩展的网络爬虫。使用Urllib将新闻搜索关键词(中文)转换为网页编码以拼接得到初始查询页链接;使用Requests库进行HTML的相关操作(如发送网页请求);使用正则表达式进行网页的解析以及文本的匹配;使用结巴分词将爬取得到的新闻正文进行分词操作;使用Collections库进行字典的初始化,以便于词频统计;使用Wordcloud来绘制词云图;数据库则使用的是MySQL。本系统所使用的技术架构都是成熟、稳定、流行的技术架构。因此,从技术可行性的角度上来说,系统是可以实现的。3.1.2经济可行性分析本系统的主要开发成本为软件硬件成本和人工成本。系统主要由我在吴老师和陶老师的指导下完成。设备主要是笔记本一台,以及诸如Pycharm、MySQL等开源软件,满足开源许可协议。系统开发完成之后的日常维护工作也较为简单。故本系统的开发成本较低,从人工和设备上都是容易实现的。通过不断的系统改进和功能改进后的新闻数据采集系统应根据需求为不同产业提供相应的服务。比方说向政府机构,公共安全,广播电视和育人组织提供舆论监督服务。协助金融组织和监管单位的日常运作。同时也可以为各种企业组织提供各种商业性的信息管理,出价监控,突发事件紧急处理,市场情况研究与分析,以及绩效评估等服务。总而言之,该系统可以创造可观的经济价值。综上所述,从经济可行性的角度上来说,系统是可以实现的。3.2用户对象分析在线新闻数据采集系统的用户通常只限于偏好特定主题的人员或公司组织,他们可以从中获得感兴趣的信息数据。又由于互联网中存在多如牛毛的新闻门户网站,这些技术人员或公司组织并没有那么多的时间去在互联网上搜集自己需要的海量数据信息,故需要使用该在线新闻数据采集系统。但是受到效率和成本的制约与影响,该在线新闻数据采集系统不需要对整个互联网的数据信息进行抓取,这也是不可能做到的事情。由于大数据时代的到来及其对企业公共的巨大影响,对于企业的公关团队来说,他们迫切需要非常及时的了解外界对于这个企业的正面或者负面的评价,并及时采取一定的措施,维护企业的形象,避免声誉损失以维持消费者的爱戴。3.3功能需求分析根据上一节的用户对象分析,可以总结出本系统的功能需求有:搜索并爬取新闻、数据清洗与存储以及可视化。3.3.1搜索并爬取新闻新闻数据采集系统的首要任务自然是寻找新闻。在新浪新闻中心中搜索与用户输入的关键字相关的新闻,得到查询页网页,分析新浪新闻的页面情况,编写合适的爬虫解析规则,将抓取得到的网页进行相应的处理以得到需要的数据,并最终存入数据库中。由于目标网站(新浪新闻)是国内比较知名的互联网网站,其反爬虫机制是必须克服的一个挑战,如果忽略这一点,则会导致系统无法正常运行。因此,需要采取多种措施及策略,保证系统平稳运行。3.3.2数据清洗与存储由于网页蜘蛛在数据采集的过程中,时常会遇到大量无效数据(如已经收集并分析过的新闻或者收集到的是空新闻),所以避免重复爬取(在爬虫中对url链接进行过滤)。一方面,能够通过过滤的url才是用户所期望获取的数据来源,数据抓取的准确性得到很好的保证;另一方面,由于大量不符合条件的url都被过滤掉了,爬行队列中仅仅加入符合条件的url,大大节省了宝贵的内存空间。这样既节省了时间与资源,又能使爬取工作的结果更为准确、有效。在网页蜘蛛的数据采集的同时,要将新抓取到的网页链接安置进待爬取列表之中,而又由于网页蜘蛛的机械性,无法准确地判断出某一个或几个新闻链接是否已经爬取过,以及解析之后的结果是否与之前解析过的已有数据相同。这就要求在爬行过程中为爬虫定义一个判定条件,只有符合某些特定条件的新闻链接才能被识别并加以解析,其余的新闻链接(即重复链接或者空新闻的链接)将会被跳过,不进行访问与数据采集。这里进行去重的方法是除了判断url是否已经爬取过,还要判断新闻标题与新闻来源(作者)是否同时与已爬取过的新闻相同,因为有的新闻来源(作者)在上传新闻的时候会在不同板块上传相同内容的新闻,故仅仅使用url是否相同进行判断是不够的,仍然可能会有重复新闻。在数据清洗结束之后,将数据条目存储到MySQL数据库中。图3-1去重策略流程图3.3.3可视化仅仅将新闻爬取并保存到数据库之中是不够的。由于在数据库中查看爬取下来的新闻极为不便,为了给予用户更好的体验,使得用户能更为方便且清晰地查看新闻,同时能简单明了地了解当下的热点动态,把握舆论导向。本文考虑的方法是生成CSV文件与词云图。CSV文件的创建、存储等操作十分方便,且可以使用Excel打开。使用户查看爬取下来的新闻变得十分便捷。而且也可以使用Excel中的一些便捷操作(如搜索以及根据时间排序等)。对新闻信息以及新闻分析的结果进行分词,然后对高频的有效分词进行绘制,得到词云图。词云图非常有助于用户直观清晰地了解大量新闻的共同主要关键词,掌握新闻热点动态与舆论走向。3.4本章小结本章详细介绍了的需求分析工作,便于开展后续的设计和实现工作。本章主要从技术可行性和经济可行性两个方面对在线新闻数据采集系统的可行性进行了评估,同时进行了用户对象分析,并总结出了相应的功能需求。第四章网络爬取系统设计需求分析部分主要分析了系统的功能。系统设计阶段则要分析这些功能应该如何实现,即根据需求分析工作得出的系统需求,进行更为具体的数据库设计与功能模块设计。4.1数据库结构设计正确的、完善的数据库结构可以确保应用程序一直保持稳定、高效地运行,如果没有设计好数据库则可能带来性能与维护等等多方面的问题,进而影响后续的开发工作。同时,数据冗杂也是一个不容小觑的问题,重复数据会严重影响系统的性能。本系统使用Navicat作为数据库管理工具,方便、简单、可靠。同时,使用MySQL8.0.16作为数据库。MySQL是时下最流行的RDBMS之一。可以通过SQL语句对其进行各种操作,简单易用。Navicat可以很好地简化数据库的管理工作。可以很好地满足管理员、程序员及公司组织的需要。由于它是基于直观的形状界面的,因此我们可以更为安全简单地组织和共享信息。由于本在线新闻信息数据采集系统的数据采集对象是新浪新闻中心的在线新闻,故必须以能够准确反映在线新闻特点的字段为采集目标,通过分析新浪新闻的网页结构,本文的数据抓取主要分为以下两个步骤。第一步,访问查询页并抓取查询页新闻,获得新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要这5个字段;第二步,在获得新闻正文页链接之后进行访问,并获得新闻正文。定义字段详情如表4-1所示。表4-1数据库字段名字段类型字段含义titleChar新闻标题share_peopleChar新闻来源share_timeChar上传时间urlChar新闻链接main_txtChar新闻摘要textChar新闻正文4.2系统功能模块设计本文中的在线新闻信息数据采集系统主要包括数据采集功能模块和可视化功能模块这两个功能模块。其总体的工作流程如图4-1所示:图4-1系统主要工作流程4.2.1数据获取功能模块该在线新闻信息数据采集系统主要依靠网页机器人来实现数据的获取。在得到初始链接之后,网页机器人会对该初始链接进行访问。并且对网页中的目标数据信息进行抽取,同时将新抓取到的网页链接添加到待爬取列表中,并将采集到的数据信息进行存储。爬虫程序的数据获取功能主要由爬取子模块据清洗子模块以及存储子模块构成,图4-2为其模块结构。图4-2数据获取功能模块结构图1)数据爬取子模块本模块主要采用Python语言编写了一个针对新浪新闻中心的可扩展的网络爬虫。主要分为一下三个步骤第一步:使用Urllib将新闻搜索关键词(中文)转换为网页编码,再借助新浪新闻中心的搜索功能进行url的拼接,以得到初始查询页链接。随后对该链接进行访问,并获取查询页的网页源码。第二步:通过观察查询页的网页源码,寻找新浪新闻中的各个字段的规律(例如:新闻标题均位于<h2>标签之后的第一个模块),使用正则表达式对该网页源码进行网页的解析以及文本的匹配。获取正文页链接、标题、上传时间、新闻来源(作者)、摘要等数据。第三步:访问上一步获取的正文页链接,得到正文页的网页源码,观察其中规律并爬取新闻正文。2)数据清洗子模块本文的数据清洗子模块主要包括“去除重复新闻”和“去除空新闻”两个部分。其中,“去除重复新闻”可以放置在正文爬取之前,通过检索是否为重复新闻来达到链接过滤的目的。(1)去除重复新闻这里使用的算法是定义一个列表用于记录已经访问并爬取过的新闻的链接。在得到每一个新的新闻链接之后判断其是否已经存在于这个列表之中,若存在,说明该链接已经访问并爬取过,是重复链接,则跳过该链接,去检索下一链接;若不存在则将其加入此列表并执行后续操作。但又由于有的新闻作者会在新浪新闻中心的不同模块上传同一新闻,从而导致了一部分的新闻拥有相同的内容,却有着不同的新闻链接(即url),故仅仅根据两则新闻的url是否相同来判断是否是重复新闻是不够的,还需要进一步改进算法。因为同一作者上传的同一新闻往往具有相同的标题,又因为同一标题但不同作者的两则新闻往往有着不同的内容,且同一作者但不同标题的两则新闻一般也有着不同的内容,所以可以通过判断两则新闻的标题与作者是否同时相同进行判断。(2)去除空新闻在数据爬取子模块中解析出来的新闻正文若为空,则不继续后续的存储操作,直接访问下一链接。3)数据存储子模块在每次进行完HTML页面的信息抽取之后,都要将所有获取到的元数据写入到数据库中去,另外还需要将本次抓取的url也写入数据库中。数据存储子模块的工作流程如图4-3所示:每次访问并解析有效新闻链接都会采集到的新闻标题、上传时间等元数据以及新闻正文的正文页链接。随后再将元数据以及url写入数据库。下图为数据存储的运作流程。图4-3数据存储子模块4.2.2可视化功能模块 1)生成csv文件:CSV文件可以使用Excel打开,直观清晰。并且可以使用Excel的相关操作,例如搜索、按时间升序或降序等等。图4-4新浪新闻.csv2)生成词云图对新闻正文的内容进行文本分词(采用可以处理自然语言的结巴分词库),得到分词后计算各个分词所出现的词频,然后对词频进行排序得到排序后的分词列表,最后对一定数量的高词频的分词进行词云图可视化。图4-6圆形图片素材4.3本章小结本章从整体上设计了在线新闻信息数据采集系统的数据库结构,并对系统的各项功能模块进行了全面具体的设计。同时阐明并区分了数据采集功能模块(及其子模块)以及数据可视化功能模块的功能结构。为该在线新闻信息数据采集系统的最终实现做好了充分的准备工作。第五章网络爬取的实现本章节对在线新闻信息数据采集系统的总体设计进行了分解、细化和补充,同时详细说明了各个功能模块及其子模块的算法或结构,并最终完成开发与技术实现,5.1数据获取模块该模块使用Python语言实现了一个以新浪新闻中心的新闻为爬取对象的网页蜘蛛,该网页蜘蛛能够按照输入的关键词,对相关的新闻数据进行准确、定向的采集。首先要设计科学合理的数据采集策略。网页蜘蛛的功能是在访问互联网页面,下载目标网页的信息与内容,数据采集策略是网页蜘蛛在Internet中搜寻、访问url和爬取信息的依据。一个科学、合理的数据采集策略可以让网页蜘蛛的运行事半功倍。通过分析新浪新闻的网页结构,本文的数据获取主要分为两个步骤。第一步,访问查询页并抓取查询页新闻,获得新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要这5个字段;第二步,在获得各个新闻的新闻链接之后进行访问,并爬取新闻正文。由此可得,该在线新闻信息数据采集系统的数据采集策略为:1)使用新浪新闻中心的搜索url,进行关键字和查询页码的拼接,得到初始查询页url。2)启动网页蜘蛛,访问初始查询页url并获得网页源码。3)网页蜘蛛根据正则表达式识别查询型网页源码中新闻内容页地址以及新闻标题、上传时间等字段,并将识别的新闻内容页地址加入待抓取链接列表,等待访问与解析。4)网页蜘蛛从待下载队列中依次取出网页链接并进行访问,解析得到新闻正文。5)将获得的新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要以及新闻正文这六个字段进行清洗与过滤,去除无效数据之后,保存到数据库中。5)当待抓取链接列表没有仍未抓取的链接时,网页蜘蛛停止运行。5.1.1创建数据库这里首先使用游标查询所有的表,若没有news这个表则进行创建。这个表包含了以下六个字段:新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要以及新闻正文。同时读取数据库中的所有url,将其保存到all_url中,便于后面的去重操作。#创建游标cursor=db.cursor()cursor.execute("showtables;")#查询所有的表名tables=str(cursor.fetchall())if'news'notintables:sql='''CREATETABLEnews(titlechar(255)notnull,share_peoplechar(255),share_timechar(255),urlchar(255),main_txtchar(255),textchar(255));'''cursor.execute(sql)sql='select*fromnews;'#查询news这个表格里面的全部数据cursor.execute(sql)data=cursor.fetchall()#news表格的全部数据all_url=[]#新建一个列表,存新闻的urlforiindata:url=i[3]#表的第四个字段:新闻的urlall_url.append(i[3])#新闻url添加进列表5.1.2定义请求头由于新浪新闻设置了cookie验证,如果请求中不定义请求头,即不在headers中使用cookie,则会被拒绝访问。为了能够通过cookie的反爬虫,需要使用Requests来处理cookie相关的请求。Cookies的本意是“饼干”。在用户访问互联网Server之后,客户端上会保留一些Server的数据信息,这就是Cookies,犹如Server反馈给用户的“饼干”。之后用户每一次向Server发送访问请求时,请求数据中都会包含Cookies。Server解析访问请求中的Cookies之后,就能由此查看用户用户的状态。因为Server可以根据Cookies来获得用户的相关信息数据,所以这项技术非常适合一些类似在线商城或者反网页蜘蛛等等需要对用户进行区分的时候。5.1.3链接检索与元数据获取本文中需要进行检索的新链接主要分为两类:一类是查询页链接,一类是正文页链接。查询页链接指向包含大量正文页链接的查询型网页,同时也包含了新闻简介(即标题、来源、上传时间以及正文摘要这五个字段);正文页链接则指向了实际的新闻正文页面。网络爬虫从查询型网页的网页源码中解析出新的新闻正文页链接,加入待下载队列准备进一步的新闻抓取。1)搜索新闻获得初始链接爬取的第一步便是搜索出相关的新闻以获得查询页链接,这里借用了新浪新闻的搜索,再使用用户输入的关键词word与循环页数page进行拼接,得到查询页链接。代码如下:#查询关键字word=input('请输入关键字:')word=parse.quote(word)#转换成网络编码,即%1A%5b...这种格式print('正在爬取和写入数据库...')forpageinrange(1,20):#循环的页数#拼接每一页的urlurl='/?q=%s&c=news&from=channel&col=&range=all&source=&country=&size=10&stime=&etime=&time=&dpc=0&a=&ps=0&pf=0&page='%word+str(page)图5-1查询型网页(包含多个新闻简介)5.1.3数据清洗与存储数据清洗主要分为两个部分:“过滤重复新闻”和“去除空新闻”。1)过滤重复新闻由于网页蜘蛛在数据采集的过程中,时常会遇到大量无效数据(如已经收集并分析过的新闻或者收集到的是空新闻),所以避免重复爬取就显得格外必要,这样既节省了时间与资源,又能使爬取工作的结果更为准确、有效。而避免无效数据的首要任务就是避免重复的访问同一新闻。我们不希望反复的访问同一个新闻地址,因为这不仅仅会压缩网页蜘蛛的工作速度,还会损耗中央处理器的宝贵资源,增加目标网站的Server所受到的压力。而且也大大提高了被反网页蜘蛛程序发现的几率,进而导致数据采集工作的被迫中止。由于爬虫无法智能的分辨某一网址是否已经爬取过,或者某两个网址的新闻是否为同一新闻,故需要设计数据清洗与过滤的算法。避免重复数据反复请求,可以有效减少网络之间的环路,提高数据采集的速度,降低存储器的输入输出频率,降低数据库的压力,避免资源浪费与数据冗杂。也只有清洗之后的数据信息才具有可用性。 而想要避免对同一新闻网址的多次访问,可以考虑使得待访问的新闻链接不重复,基本可以解这一问题。这里使用的算法是定义一个列表(all_url=[])用于记录已经爬取过的新闻。在得到每一个新的新闻链接之后判断其是否已经存在于这个列表之中,若存在,说明该链接已经访问并爬取过,是重复链接,则跳过该链接,去检索下一链接;若不存在则将其加入此列表并执行后续操作。根据新闻链接进行去重操作的代码如下:ifnew_urlinall_url:#若新闻链接列表里已经有该链接,则跳过该网站,继续爬取下一个网站。continueall_url.append(new_url)#没有则添加进列表但又由于有的新闻作者会在新浪新闻中心的不同模块上传同一新闻,从而导致了一部分的新闻拥有相同的内容,却有着不同的新闻链接(即url),故仅仅根据两则新闻的url是否相同来判断是否是重复新闻是不够的,还需要进一步改进算法。例如图5-1中的两则新闻,这两则新闻的url不同,一个的url是/article_5633622886_14fca436602700lmef.html?from=auto&subch=oauto,而另一个的是/article_5633622886_14fca436600100lme6.html?from=auto,虽然这两个新闻虽然上传时间不同,但是它们有着相同的标题、来源与摘要,且访问这两个链接之后就可以发现,它们其实是同一篇新闻。图5-3相同新闻却有着不同url综上所述,在对url进行去重的基础上,去重算法还需要进行如下改进:因为同一作者上传的同一新闻往往具有相同的标题,又因为同一标题但不同作者的两则新闻往往有着不同的内容,且同一作者但不同标题的两则新闻一般也有着不同的内容,所以可以通过判断两则新闻的标题与作者是否同时相同进行判断。2)去除空新闻在匹配正文的同时进行判断,若为空正文则跳过该链接,若不为空则把正文也放到list1之中,最后再将它们存入MySQL数据库之中,并生成csv表格。去除空新闻的代码如下:txt=re.findall('<!--正文start-->(.*?)<!--正文end-->',text,re.S)[0]txt=re.sub('<.*?>','',txt)iftxt='':#若新闻正文为空,则跳过该网站,继续爬取另一网站。continue3)数据存储每爬取一个新闻链接,就会得到新闻标题、新闻发布的时间、新闻来源(作者)、url、新闻摘要以及新闻正文这六个字段,分别记录与title,share_people,share_time,new_url,main_txt,txt这六个变量之中,将他们保存为一个列表,即可进行存储操作。数据存储的代码如下:list1=(title,share_people,share_time,new_url,main_txt,txt)#这6个字段的列表sql="insertintonewsvalues%s"%str(list1)#news即前文创建的数据库cursor.execute(sql)#写入数据库mit()#当执行插入(insert)、更新(update)、删除(delete)这些种类的语句时需要提交(commit)5.2数据可视化模块5.2.1CSV展示创建CSV文件,写入解析出来的新闻标题、新闻发布的时间、新闻来源(作者)、新闻链接、新闻摘要以及新闻正文这六个字段。使用Excel打开,清晰直观。使用open函数,以追加的形式创建一个csv文件,把newline参数设置为空,可以避免csv文件出现两倍的行距(就是能避免表格的行与行之间出现空白行)。加encoding='utf-8',可以避免编码问题导致的报错或乱码。用csv.writer()函数创建一个writer对象,将分隔符设置为“,”,借助writerow()函数可以在csv文件里写入一行文字,writerow()函数里,需要放入列表参数,所以需要把写入的内容定义为列表,在写入爬取数据之前先以列表的形式写入表格的第一行(即[标题','来源(作者)','上传时间','新闻链接','新闻摘要','新闻正文'])。然后在将爬取到的各个字段保存为一个列表list1,一并写入。直到待爬取新闻列表为空,所有爬取到的新闻信息写入完成后,再关闭csv文件。图5-4新闻CSVimportcsv...f=open('新浪新闻.csv','a',encoding='utf-8-sig',newline='')#以追加的方式打开一个csv,没有则创建writer=csv.writer(f,delimiter=',')#创建writr对象,将隔断符设置为逗号#写入第一行writer.writerow([标题','来源(作者)','上传时间','新闻链接','新闻摘要','新闻正文'])...writer.writerow(list1)#写入csv...f.close()#关闭csv5.2.2词云图展示1)读取停用词因为新闻正文难免有许多嘈杂的字词和标点符号,它们会妨碍生成词云图,不利于我们直观的看到数据所呈现出来的结果,故这里需要读取停用词来将其剔除,停用词是从网上下载的(文件名:1893.txt),分词之后再进行排查。图5-5停用词举例withopen('1893.txt','r')asf:#读取停用词,标示符“r”表示以只读方式打开文件。stop_words=f.read() 2)分词操作与词频统计(1)分词操作将数据爬取得到的所有正文进行拼接,得到所有正文的文本(all_txt),然后利用结巴分词对其进行分词操作,使用jieba.lcut可以直接生成一个列表(words)。分词操作的代码如下:word=[]words=jieba.lcut(all_txt,cut_all=True)#结巴分词(2)词频统计与排序首先要创建一个用于统计词频的字典(dic1),统计words中某个词出现的次数,并在dic1字典中作记录,分词每出现一次,在dic1相对应的键所存的值数值就加1。但Python中经常会出现一个问题,如果字典没有初始化或者初始化有问题,当访问字典中缺少的键的时候,会报告KeyEror错误。故需要对dic1设置默认值。本文的方法是直接使用本身提供了默认值功能的collections.defaultdict类,defaultdict类的初始化函数的参数可以是整型int:如dic1=defaultdict(int)创建好dic1之后,将分词操作得到的words列表中的每一个元素与之前读取的停

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论