《基于Python的网络爬虫设计与实现.docx》由会员分享,可在线阅读,更多相关《基于Python的网络爬虫设计与实现.docx(44页珍藏版)》请在课桌文档上搜索。
1、基于Python的网络爬虫设计与实现摘要:从互联网时代开始,网络搜索引擎就变得越发重要。大数据时代,一般的网络搜索引擎不能满足用户的具体需求,人们更加注重特定信息的搜索效率,网络爬虫技术应运而生。本设计先对指定URL的网址相关网页进行分析,找出网页内目标信息所在的URL信息规律;然后选择BeautifulSoup模块或IXml的html模块编写函数分级爬取这些URL;最后将URL对应的网页中的信息归类保存到文本文件中。然后利用jieba模块基于TRIDF指标对爬取的文本中的信息进行分析,再找出词频高的词,做进一步分析。基于Python实现网络爬虫程序,先对我校近几年新闻网页进行分析,找出新闻中
2、的高频词,并绘制词云图;然后针对这次新型冠状病毒所造成的疫情,从腾讯新闻网中爬取疫情相关信息、,同时根据相关信息绘制疫情分布图。两个爬虫实例表明本设计的可行性和有效性。关键词:网络爬虫,互联网,校园,疫情DesignandimplementationofwebcrawlerbasedonPythonAbstract:SincetheInternetera,Internetsearchengineshavebecomemoreandmoreessential.Inperiodofbigdata,commonnetworksearchenginescannotsatisfytheexactneed
3、sofusers,Peopleattachimportancetothesearchefficiencyofspecificinformation,andwebcrawlertechnologyemergeasthetimesrequire.ThisdesignfirstanalyzestheURLrelatedwebpagesofthespecifiedURLtofindouttheURLinformationruleofthetargetinformationinthewebpage;thenselectthebeautifulsoupmoduleortheHTMLmoduleofIxml
4、towritethefunctiontocrawltheseURLshierarchically;finally,theinformationinthewebpagescorrespondingtotheURLisclassifiedandsavedinthetextfile.ThenusethejeebamoduletoanalyzetheinformationinthecrawledtextbasedonTFIDFindex,andthenfindoutthewordswithhighwordfrequencyforfurtheranalysis.BasedonPython,novelco
5、ronavirusisfirstanalyzed.Wefindoutthehighfrequencywordsinthenewsanddrawthewordcloudmap.Then,inresponsetotheepidemicsituationcausedbynovelcoronavirus,thisdesigncrawledtheepidemicsituationrelatedinformationfromTencentNewsNetworkanddrewtheepidemicsituationdistributionmapaccordingtotherelatedinformation
6、.Twocrawlerexamplesshowthefeasibilityandeffectivenessofthedesign.Keywords:Crawler,Intemet,campus,epidemicsituation目录第1章绪论11.1 研究背景和实际意义11.2 研究现状11.3 研究方法和内容21.3.1 研究方法21.3.2 研究内容2第2章基于PythOn的网络爬虫技术的相关方法32.1 网页分类32.1.1 静态网页32.1.2 动态网页32.2 正则表达式32.3 中文分词42.4 词云图生成52.5 数据管理62.6 BeautifulSoup6第3章基于PythO
7、n的校园网新闻信息获取与分析73.1 基于Python的校园网新闻信息爬虫实现73.1.1 网页信息获取103.1.2 版块新闻链接列表搜索113.1.3 版块新闻网页新闻内容获取133.2 基于Python的校园网新闻信息分析实现143.2.1 新闻信息数据管理143.2.2 新闻内容文本分词163.2.3 停用词删除173.2.4 高频词词云制作183.2.5 新闻内容词语分析19第4章基于Python的新型冠状病毒疫情爬虫实现204.1 每日疫情数据获取及曲线图绘制214.1.1 每日疫情数据爬取程序现实214.1.2 每日疫情数据曲线图绘制程序现实234.2 各地疫情数据获取及曲线图绘
8、制254.2.1 各地疫情数据爬取程序现实264.2.2 各地疫情当前数据曲线图绘制程序现实28第5章总结31参考文献32致谢33第1章绪论1.1研究背景和实际意义21世纪初起,互联网得到了蓬勃的发展,万维网成为海量信息的载体,人们希望能够有效利用万维网里的数不胜数的数据信息,所以网络信息提取成为这一愿望实现的关键。网络世界里的信息成千上万,特别是近年来信息量呈指数增长,人们更加注重从互联网上搜索自己想要信息的效率。人们开始运用搜索引擎来帮助自己在互联网中查找所需要的信息。但是一个一般的搜索引擎必然存在着一定的局限性,不同背景、不同深度、不同领域的用户检索的期望信息一定是不同的,互联网用户只想
9、快速找到自己所需求的信息,但一般的搜索引擎返回的搜索结果包含了庞大的无效信息。通用搜索引擎在一般情况下不能提供精准且专业的信息搜索,同时查准率低、无效信息多、也无法避免广告推送。因此一般的搜索引擎不可能满足特定用户的专业需求,对于这特等的用户需求则需要更加准确的搜素引擎,在大量的需求下,网络爬虫的技术得以快速发展。网络爬虫技术是一种个性化互联网数据信息搜索的网络数据信息获取技术。网络爬虫的英文名称为WebSpidcr0互联网就像一张巨大且密集的蜘蛛网,Spider这只蜘蛛就在这张网上不断移动。一个生动形象的比喻就是蜘蛛(WebSPider)通过网线的颤抖(网页的链接地址)来搜寻食物(网页)。从
10、任意一个网页(一般情况下是首页)开始,读取网页中数据,从这个网页里搜索其它链接的地址,通过所找的链接地址去找下一个网页。按照这种方式不断循环,直到所选取的网站里全部的网页全部抓取完为止。假定我们把整个互联网比喻成一个网站,网络蜘蛛就可以运用上述方法把互联网中一切的网页都抓取下来。在用户专业性需求下,网络爬虫程序可以在指定网页页面搜索需要的相关信息,而过滤掉其他繁杂的冗余信息,并通过程序对搜索到的信息进行归类保存。大数据时代的到来,意味着更多信息涌入,想要在互联网这片大海中捞到想要的东西也愈发困难,所以网络爬虫的意义就是越显重要。能够帮助我们节省时间和精力,同时也能确保我们找到我们想要的东西。在
11、这个节奏越来越快的世界中,网络爬虫凭借这高效这一点,就有着无穷的意义与价值。12研究现状在上世纪九十年代在麻省理工学院一位叫MattheW的老师就研发出第一款有文献记载的爬虫。爬虫作为核心的搜索引擎技术已经历经近30年的发展,网络爬虫已日趋多样。为满足不同用户不同的需求,人们开发了类型繁多的爬虫。但爬虫技术在西方世界迅速发展的情况下,2004年前我国内基本对于网络爬虫技术没有什么关注,从2005年开始国内才开始关注爬虫技术。目前需求量也是也来越大,急需这方面人才。目前爬虫也只能分为两大类,一类为Google之类的大型搜索引擎的大型爬虫,另一类就是个人型爬虫或中型爬虫。网络爬虫开源系统喷涌式出现
12、,因此人们研发一个简单的抓取系统变得不再困难,但是由于大量程序开源,使得很少有人愿意潜心研究网络爬虫的关键技术。因此在这种不良的环境下,小型爬虫系统质量不高。所以对于中小爬虫的发展还是任重道远。1.3研究方法和内容1.3.1 研究方法网络爬虫应用宽度搜索技术,对URL进行分析,去重。网络爬虫使用多线程技术,让爬虫具备更强大的抓取能力。网络爬虫还要完成信息提取任务,对于抓取回来的网页进行筛选、归类。在学习使用PythOn软件的同时,复习网络知识,进而掌握基于PythOn软件的网络爬虫程序编写方法。本设计拟对我校近几年新闻网页(WWW)进行分析,获取相关网页URL及网页文本内容,然后利用jieba
13、模块基于TFTDF指标对爬取的文本信息进行分析,找出新闻中的高频词,并绘制词云图。同时针对今年对我国发生的新型冠状病毒肺炎疫情,利用动态网页获取方法从腾讯新闻网站()下载疫情分析数据,并绘制疫情相关图。1.3.2 研究内容本设计具体内容安排如下:第1章:介绍网络爬虫的历史背景和实际现状,阐述了本设计所使用的爬虫技术,简单描述了本设计的两个实际应用的实现。第2章:介绍一些基于Py由On的网络爬虫的相关方法。第3章:校园网新闻信息获取的程序介绍,分析和运行结果的图片展示。第4章:新型冠状病毒疫情爬虫的程序介绍,分析和运行结果的图片展示。第5章:总结。第2章基于PythOil的网络爬虫技术的相关方法
14、2.1 网页分类互联网里众多网页主要将其分为静态和动态。当然静态是相对于动态而言的,比不是说静态就是一点不会变动的。2.1.1 静态网页在网站设计中,纯粹HTML(标准通用标记语言下的一个应用)格式的网页通常被称为“静态网页”,静态网页是标准的HTML文件,它的文件扩展名是.htm、.html,可以包含文本、图像、声音、FLASH动画、客户端脚本和ACtiVeX控件及JAVA小程序等。静态网页是网站建设的基础,早期的网站一般都是由静态网页制作的。2.1.2 动态网页动态网页URL的后缀不是.htm、.html、.Shtm1、.Xml等静态网里的常见形动态网页制作格式,而是以.aspx、.asp
15、、jsp、.php、.perl、.Cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号一一。动态网页一般以数据库技术为基础,可以大大降低网站维护的工作量,采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、用户管理、订单管理等等。同时动态网页实际上并不是独立存在于服务器上的网页文件,只有当用户请求时服务器才返回一个完整的网页。不只有HTML代码写出的网页被称为动态网页,这些网页一般由CSS,JavaScripl代码和HTML代码一起构成网页,它们用Ajax动态加载网页的数据不一定出现在HTML代码中,这就需要复杂的操作。2.1.3 2正则表达式正则表达式概念:是指一
16、个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。正则表达式的特点是:1 .灵活性、逻辑性和功能性非常强。2 .可以迅速地用极简单的方式达到字符串的复杂控制。re模块使Python语言拥有全部的正则表达式功能。比如:re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回noneore.search扫描整个字符串并返回第一个成功的匹配。pile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正
17、则表达式匹配和替换。compile函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search()这两个函数使用。re.findall方法能够以列表的形式返回能匹配的子串2. 3中文分词中文分词,即ChineseWordSegmentation,将一个汉字序列进行切分,得到一个个单独的词。表面上看,分词其实就是那么回事,但分词效果好不好对信息检索、实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的。中文分词主要应用于信息检索、汉字的智能输入、中外文对译、中文校对、自动摘要、自动分类等很多方面。下面就以信息检索为例来说明中文分词的应用。例如:”
18、制造业和服务业是两个不同的行业”和“我们出口日本的和服比去年有所增长”中都有“和服”,而被当作同一类来处理,结果是检索“和服”的相关信息,会将他们都检索到,在信息量少的情况下,似乎还能够忍受,如果是海量信息,这样的结果就会令人讨厌了。通过引入分词技术,就可以使机器对海量信息的整理更准确更合理,在“制造业和服务业是两个不同的行业”中“和服”不会被当做一个词来处理,那么检索“和服”当然不会将它检索到,使得检索结果更准确,效率也会大幅度的提高。所以中文分词的应用会改善我们的生活,使人们真正体会到科技为我所用。从排序里取出预定前N个最优文本特征作为原始语料文本特征子集。基于词频和逆文档频率的TF-ID
19、F算法是一种十分流行的文本特征选取算法。对于文档式的特征词*其在文档d中出现的总次数为&,;文档d,中出现的词的总数JN=斗标翻库中途总数;间:t0标包含词语(的蜡总数。TF和IDF分别为词频和逆文档频率,TF-IDF是一种常用的加权指标,多用于信息检索与数据挖掘。基于TF-IDF的特征选择思想是:如果某个词在某篇文章中出现的频率很高,在其他文章中出现的频率相对较低,那么就说明这个词在这篇文档中比较重要,即可作为这篇文章的一个分类特。TF-IDF=TFxIDFf公式中,N,表示包含词语L的文档总数,如果L不在语料库中,则分母项为Q因此一般情况下使用N,+l作分母,一般用IDF平滑后的公式:词频
20、IH表示词语在文档d,中相对于语料库所有文件的出现概率,该词在文档d中出现次数越高,开,值就越大;逆文档频率IDR则用另一种形式表示相反的情况,反应包含词讯的文档d9相对于语料库所有文档出现的逆概率,包含该词的文档4出现的次数越多,逆文档频率值越低。某词语在某特定文件内的高词频,以及其在整个文件集合中的低逆文档频率,可以得出较高的TF-IDF值。基于TF-IDF指标可以过滤掉语料库文档中普遍出现的词语,保留在某些文档中出现频次较高的具有丰富分类特性的重要词语(后文简称特征词)。2.4 词云图生成在现在互联网信息时代,我们能在各种手机app或计算机网页上看见各式各样的词云图,词云图可以帮助我们从
21、庞大且杂乱的信息中提取出现概率最高的词,让使用者更加清楚且直观的看到有效信息。词云库把词云当作一个对象,WordCloudO是一个文本中与其相对的词云。本设计依据词语出现频率高低的来绘制图片,同时设定词云图的大小、样式、颜色等。wordcloud=WordCloud(simhei.ttf,)fontpath=Simhei.Itf#字体aimask=np.array(Image.open(vordpic.png)#导入图像数据wc=WordCloud(font_path=fontpath,#设置字体路径background-color=,whitezz,#背景颜色max_words=1000,#
22、词云显示的最大词数max_font_size=100,#字体最大值min_font_size=10,#字体最小值random_state=42,#随机数Collocations=False,#避免重复单词max_words=200#要显示的词的最大个数mask=aimask,#造型遮盖Width=I200,height=800,margin=2,#图像宽高,字间距,需要配合下面的pit.figure(dpi=xx)放缩才有效)word_frequence=x0:xllforxinWOrdS_count.head(50).ValUes#WordS_count前50行数据,即词频前50的词汇wor
23、d_cloud=wc.fit_words(word_frequence)#根据词频生成词云plt.figure(dpi=50)#通过这里可以放大或缩小plt.axisCoff)#隐藏坐标plt.imshow(word_cloud)2.5 数据管理pandas提供了大量能使我们快速便捷地处理数据的函数和方法。DataFrame是Python中PandaS库中的一种数据结构,它类似excel,是一种二维表DataFrame函数是创建一个二维表,传入参数,是所存放的数据。2.6 BeautifulSoupBeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器。B
24、eautifulSoup最主要的功能是从网页抓取数据。SOUP=BeautifulSoup(article-doc,html.parser)利用BeautifulSoup模块的EnLall()函数搜索新闻信息、。将相关信息按指定顺序存入文本文件。soup=BeautifulSoup(listpage,html.parserf)#利用BeautifuISoup模块利用标签a的两个属性(href和ClaSS)找该对应的链接条件第3章基于PythOil的校园网新闻信息获取与分析依照用户设定的规则获取互联网网页中的文字,图片或者一切内容的一组程序或脚本就是网络爬虫,网络爬虫的重要作用简单来说就是让互联
25、网网页的内容下载到本地从而本地有了一个镜像备份。时至今日互联网爆炸的时代,几乎所有网页都会提供给互联网网民们大量的信息,但是这些庞大的数据中大部分都是用户不需要的,就算是专门搜索或者在相关的主题网页中,想要找到用户心仪的信息也是十分困难的。在庞大的数据下需要互联网用户一个一个去鉴别,这是十分费心费力的一件事。所以,就可以专门设计一个符合用户需求主题的爬虫进行精准搜索,方便快捷地获取用户需要的数据。主题网络爬虫就完美的符合用户需要。高网速大数据的今天,主题网络爬虫在Web应用中的地位将越发重要甚至是不可代替。网络爬虫第一步选择爬取对象的链接地址(即URL),将URL放置在待爬取的队列里;第二步从
26、待抓取URL队列里读取一条URL接着进行DNS解析,下载网页内容;第三步分析网页内容,从中搜索符合特定要求的数据,并按指定格式保存;第四步对数据进行分析处理。搜索网址URL列表导入网页数据授索特定数据数据分析处理图1本章网络爬虫和数据处理流程本章首先利用利用网络爬虫技术从我校校园网的校园新闻和综合新闻两个版块下载、搜索新闻;然后对新闻进行分词处理,分析其中新闻高频词。编程中用到ThreadPoOI模块、requests模块、BeaUtiftIISoU模块、DaIaFrame模块、WOrdClOUd模块以及PythOn的内置OS模块、re模块、PandaS模块和numpy模块。3.1 基于Pyt
27、hon的校园网新闻信息爬虫实现利用网络爬虫技术从我校校园网的校园新闻(网址:图2是以校园新闻版块为例的信息爬取流程图。综合新闻版块新闻爬取方式相同。设计中利用ThreadPool模块将两个版块主页网址输入ThreadPOOI对象的m叩函数,由系统并行搜索两个版块的新闻信息。代码如下:#两个新闻版块爬取链接FILE_CONFIGS=https:/pool=ThreadPool)pI.map(main,FILE-CONFIGS)pool.closeO#关闭进程池(pool),使其不再接受新的任务pooljoinO#主进程阻塞等待子进程的退出,join方法要在Ck)Se或terminate之后使用创
28、建文件夹校园新闻版块搜素新闻献列三按指定格式存入文件图2校园新闻版块信息爬取流程图根据流程,编写主函数main()程序。偌max_file=300#最大文件数#requests请求头HEADERS=accept:text/htm,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,accept-encodingz,gzip,deate,br,accept-language:zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,Connection:close,User-Agen
29、tTMozilla5.0(WindowsNT1().0;Win64;x64)APPleWebKitY537.36(KHTML,likeGecko)Chrome71.03578.98Safari/537.36#爬虫浏览器C0DE=UTF-8#全局默认编码defmain(config):url=config0#信息链接地址URLfile_name =configl#文件名dir_path=config2#文件夹file_num=Omkdir(dir_path)#创建文件夹doc=get-html(url+.htm)#获取每类别的网址网页内容ifdoc!=:total_page=get_totaLP
30、age(doc)#当前网页总编号foriinrange(total_page):#遍历所有页page=i+llist_page_url=url+page_page.html.format(page=page)#获取该类其中一页的链接list_doc=get_html(list_page_url)#获取该类其中一页的页面信息iflist_doc!=”:iffile-name=,xyxw:ftype=1;#校园新闻else:ftype=2;#综合新闻article_urls=get_article_urls(list_doc,ftype)#提取该类其中一页中各个链接forarticle_urlin
31、article_urls:article_doc=get_html(article_url)#提取每类每个页面中的信息ifarticle.doc!=:#将爬取信息中特定信息存入文件中file_path=dir_path+file_name+str(file_num)+.txtflag=save_article(article_doc,article_url,file_path)#按指定格式存入文件ifflag:file-num+=1PrinI(保存s类第d个文件(file_name,file_num)iffile_nummax_file:#每类信息最多保存500个文件breakiffile_n
32、ummax_file:break本设计实现爬取的关键程序流程图如图3configfile rameconfigllu fl:di_path:Confi g2file_iuim=(ymkdir(diJPath)doc=ga.hint(ul+hmi)-docle7 -覆图33.1.1 网页信息获取利用reqests模块获取指定网址URL的页面信息。设置了最大重试次数为3次,如果3次请求目标URL都失败则抛出异常。对于请求返回的状态码为200的响应,将以字符串的形式返回请求到的页面HTML代码。具体代码如下:defget_html(url):doc=try:session=requests.sess
33、ionO#开启会话,可以跨请求保持某些参数session.mount(https:/,HTTPAdapter(max_rctries=3)request=requests.get(url=url,headers=HEADERS,timeout=30)#根据网址和HEADERS请求session.close)#关闭会话request.close()#关闭请求ifrequest.status_code=200:request.encoding=,utf-8doc=request.textexceptRequestExceptionase:print(无法获取文件信息)returndoc图4网页信息
34、获取流程图3.1.2 版块新闻链接列表搜索利用BeaUtifUISoUP模块和re模块从校园新闻和综合新闻两个版块主页中获取总页数和各自的子网页链接地址列表。每个版块总页数只需要用re模块的findall()函数,找到其中匹配的参数即可。代码如下:defgetOtaLPage(doc):#从doc字符串中提取出页码和总页数Ilregex=共有b(d*?)/b页result=re.findall(regex,doc,re.DOTALL)OJ#寻找匹配括号里(.*?)和(d*?)的内容total_page=inl(resull)#总页数returntotal_page版块子网页链接地址列表用Bea
35、UtifUISoUP模块的find_all()函数,利用标签a的两个属性(href和ClaSS)找该对应条件的链接地址。具体代码如下:defget_article_urls(listpage,ftype):#获取链接地址列表ifftype=l:#校园新闻base_url=httpselse:#综合新闻base_url=,httpsnewssoup=BeautifulSoup(listpage,html.parser)#利用BeaUtifUISoUP模块#利用标签a的两个属性(href和CIaSS)找该对应的链接条件ifftype=l:#校园新闻urls-tree=soup.find-all(,
36、a,href=piIe(CampusNews,),class-=dot)else:#综合新闻urls-tree=soup.find-all(,a,href=piIe(GeneralNews,),class-=,dot)article_urls=forurlinurlstree:url=url.get(href)ifurl.startswith(http):#以http开头的字符串(即链接地址)article_urls.append(url)#追加链接地址else:article_urls.append(base_url+url)#不以http开头的字符串,则基地址+链接returnarticl
37、eurls图5地址链接流程图3.1.3 版块新闻网页新闻内容获取用re模块的findall()函数搜索新闻标题和发布日期,利用BeautifulSoup模块的find_all()函数搜索新闻信息。将相关信息按指定顺序存入文本文件。具体代码如下:defsave_article(article_doc,article_url,file_path);try:regex=(.*7),title=re.findall(regex,article_doc,re.DOTALL)OJ#寻找hl标签的内容,即文章的标题regexd=发布日期:(.*?),datas=re.findall(regexd,artic
38、le_doc,re.DOTALL)01#寻找日期soup=BeautifulSoup(article.doc,html.parser,)#利用BeautifulSoup模块elements=soup.find_all(p,style=re.conipile(text-indent:2em;)#找新闻信息content=iflen(elements)O:forelementinelements:#遍历element=slr(elemenl.text*获取每一簇信息para=del_space(element)#自定义的删除空格函数,在后面content+=parawithopen(file-pa
39、th,w,encoding=CODE)asf:#按指定顺序写入文件f.write(datas+n)#首段:发布日期f.Write(title+n,)#第二段:信息头f.write(content+n,)第三段:信息主题f.writelines(article_url)#最后段:信息的链接地址returnTrueexceptIndexError:Print(无法保存文件)returnFalsedefdelspace(string):#去除中文之间的空格保留英文之间的空格String=String.StripO#移除字符串头尾指定的字符(默认为空格或换行符)或字符序列pattem=pile(r(r
40、u4e00-u9fa5+)s+(u4e00-u9fa5+)s+)#As用于匹配空白字符string=pattern.sub(r12,string)returnstring目标网址图6获取新闻流程图3.2基于Python的校园网新闻信息分析实现针对3.1节利用网络爬虫技术获取的校园新闻和综合新闻两个版块的相关新闻信息文件,将新闻文字进行数据管理、分词、停用词删除、统计和制作词云等操作(如图3所示)。高频频斓作0新闻内容词语分析图7校园新闻版块信息分析流程图3.2.1 新闻信息数据管理校园新闻和综合新闻两个版块所在文件夹内的所有文本文件数据进行收集处理,按类别、标题、日期和内容进行管理。先将字符串
41、生成字典,再将文件存为DataFmme格式。具体代码如下:deftext_processing(fblder_path):folderist=osistdir(foldeJPath)#查看folder_path的子文件夹for folder in folder_list:#遍历每个子文件夹newfolderpath=os.path.join(folderpath.folder)#根据子文件夹,生成新的路径files=os.Iistdir(new_folder_path)#放子文件夹下的txt文件的列表kind=riffolder=-xyxw,:kind=校园新闻else:kind=综合新闻fo
42、rfileinfiles:#读取合并文章数据path=os.pathjoin(new_fblder_path.file)data=kindwithopen(path,mode=r,encoding=CODE)asf:forlineinf:#读取每一段,顺序将与DataFrame列名对应data.append(line.strip)data_dict=dictP(COLUMNS,data)#用ZiPO函数根据键字进行排序dLnews=DataFrame(data_dict,index=O)#DataFrame类的方法,将键字作为列名dLnews.to_csv(news_docu.txt,inde
43、x=False,header=False,mode=a+,encoding=CODE)#读取出文件中的数据,以COLUMNS,为列名dfLdocs=pd.read_csv(news_docu.txt,names=COHJMNS,encoding=CODE)#数据清洗:如果某条数据有缺失值(na数据)直接删除整条数据djdocs=df_docs.dropna()returndfdocs3.2.2新闻内容新闻内容处理必须有实际意义的jieba分词器 支持基于TF-IDF利用jieba分 COntent列进行分defcontent =图8数据管理流程图文本分词的基础是“词”,这些“词”写。利用开源的
44、分词器对新闻内容分词Ojieba算法选择关键词。词器对3.2.1得到的数据词。代码如下:split_word(df_docs):分词需要list格式dLdocs(,content.values.tolist()jiebacontent_s=Jforlineincontent:current_segment=jieba.lcut(line)#分词,返回歹IJ表ifIen(current_segment)1andcurrent_segment!-n,:#换行符content_s.append(current_segment)#追力口returncontent_s图9分词流程图3.2.3停用词删除对
45、3.2.3得到的分词进行过渡,将其中“停用词”删除。利用已有的停用词表删除分词中的停用词,保留有效的有实际意义的词。代码如下:defdrop_stopwords(contenl_s)stopwords=pd.read_csv(./files/stopwoFds.txt,index_wl=False,sep=t,quoting=3,naiTies=stopword,enc(xling-utf-8)SK)PWordS=StOPWordS.slopword.values.ist)#转换为list类型contenls_drop=#记录去除停用词后出现的词alLwords=forlineincontendsline_clcan=forwordinline:ifwordinStoPWOrds:#判断是停用词则不追加continueline_clean.append(word)#判断不是停用词,则追加all_words.appe