赞
踩
思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。希望该系列线上远程教学对您有所帮助,也希望早点战胜病毒,武汉加油、湖北加油、全国加油。待到疫情结束樱花盛开,这座英雄的城市等你们来。
首先说声抱歉,最近一直忙着学习安全知识,其他系列文章更新较慢,已经有一些人催更了,哈哈。言归正传,前文分享了腾讯疫情实时数据抓取,结合PyEcharts绘制地图、折线图、柱状图。这篇文章将爬取疫情相关的新闻数据,接着进行中文分词处理及文本聚类、LDA主题模型分析。希望这篇可视化分析文章对您有所帮助,也非常感谢参考文献中老师的分享,一起加油,战胜疫情!如果您有想学习的知识或建议,可以给作者留言~
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306163821515.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306205014316.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200307120501874.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306231502457.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
代码下载地址: [ https://github.com/eastmountyxz/Wuhan-data-analysis
](https://github.com/eastmountyxz/Wuhan-data-analysis)
CSDN下载地址: [ https://download.csdn.net/download/Eastmount/12239638
](https://download.csdn.net/download/Eastmount/12239638)
同时推荐前面作者另外五个Python系列文章。从2014年开始,作者主要写了三个Python系列文章,分别是基础知识、网络爬虫和数据分析。2018年陆续增加了Python图像识别和Python人工智能专栏。
前文阅读:
[ [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
](https://blog.csdn.net/Eastmount/article/details/104298388)
[ [Pyhon疫情大数据分析] 二.PyEcharts绘制全国各地区、某省各城市疫情地图及可视化分析
](https://blog.csdn.net/Eastmount/article/details/104437215)
本次爬虫目标网站是中国社会组织公共服务平台,读者可以针对不同的网站进行抓取。
第一步 分析网站
通过浏览器“审查元素”查看源代码并获取新闻的标题、URL、时间等。不同网站有不同分析方法,本文重点是文本挖掘,数据抓取仅提供一些思路。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306165310595.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
第二步,进入具体的新闻页面抓取相关的文本信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306165928211.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306165805456.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
第三步,本爬虫存在一个技巧,每条新闻的URL非常相似,这里仅变换参数来抓取新闻。
我们只需要每次抓取数据时,通过“下一页”定位下次需要抓取的URL即可,核心代码为:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200306171147798.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Vhc3Rtb3VudA==,size_16,color_FFFFFF,t_70#pic_center)
第四步,数据抓取完整代码如下所示,建议读者直接下载我的文本进行数据分析,而不用再去爬取数据高访问对方数据库。
import requests,re, csv, sys, time from lxml import html from fake_useragent import UserAgent # 记录起始时间 startTime = time.time() # 创建CSV文件,并写入表头信息 fp = open('中国社会组织_疫情防控.csv','a',newline='',encoding='utf-8-sig') writer = csv.writer(fp) writer.writerow(("标题", "时间", "URL", "正文内容", "来源")) #----------------------------------------------抓取数据---------------------------------------------- def spider_html_info(url): try: headers = { "User-Agent" : UserAgent().chrome #chrome浏览器随机代理 } response = requests.get(url=url, headers=headers).text text_html = html.fromstring(response) # 获取下一页链接,先其他元素获取一页链接,保证程序的强壮性 next_url = "http://www.chinanpo.gov.cn" + text_html.xpath('/html/body/div[2]/div/ul[1]/li[2]/a[2]/@href')[0] print("next_url", next_url) # 获取文章标题 article_title = text_html.xpath('//*[@id="fontinfo"]/p[2]/b[1]//text()') title = "".join(article_title) if title == "": title = "".join(text_html.xpath('//*[@id="fontinfo"]/p[3]/b[1]//text()')) print ("title = ",title) # 获取发布时间 publish_time = text_html.xpath('/html/body/div[2]/div/ul[1]/li[3]/strong/text()')[0][5:] print ("publish_time = ", publish_time) print ("url = ", url) # 获取来源 source_text = text_html.xpath('//*[@id="fontinfo"]/p[last()]//text()')[0] source = source_text[3:] # 爬取文本 text_list = text_html.xpath('//*[@id="fontinfo"]//text()') article_text = "".join(text_list).replace('\r\n','').replace("\xa0", "").replace("\t", "").replace(source_text,"").replace(title, "") # print ("article_text", article_text) # print ("source = ", source) writer.writerow((title, publish_time, url, article_text, source)) except: pass if url == 'http://www.chinanpo.gov.cn/1944/123496/index.html': fp.close() # 获取结束时的时间 endTime =time.time() useTime =(endTime-startTime)/60 print ("该次所获的信息一共使用%s分钟"%useTime) # 正常退出程序 sys.exit(0) else: return next_url #----------------------------------------------主函数---------------------------------------------- def main(): url
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。