通过python来实现“语象观察“自动化进阶版
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了通过python来实现“语象观察“自动化进阶版,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7007字,纯文字阅读大概需要11分钟。
内容图文
![通过python来实现“语象观察“自动化进阶版](/upload/InfoBanner/zyjiaocheng/614/a1b3990b2c7b4eda88561e09ebfa665b.jpg)
“语象观察”是钱刚老师之前在做的一个研究项目,之前曾经在公众号“尽知天下事”(现已被封)上发布。我对这种通过数据来发掘有价值的内容的数据新闻很感兴趣,算是弥补自己文笔不行还想从事新闻传媒的曲线救国道路吧。
不过作为一个对电脑方面感兴趣但很小白的我来说,所有的步骤想起来都很简单,但实操起来无从下手,不过决心还是很坚定的,决定要做到现在基本完成将近10个月。
一步步找问题,找解决办法,和一次次试验。念念不忘,必有回响。目前我已经实现了所有我最初的设想功能。
一:获取人民日报的数据
分析数据,第一步是要获取人民日报的数据。利用爬虫每月爬取人民日报当月内容为txt文件,爬虫这部分代码来源于CSDN用户@机灵鹤,帮助我解决了最难的变成问题,非常感谢。
1、代码如下:
import?requests
import?bs4
import?os
import?datetime
import?time
def?fetchUrl(url):
????'''
????功能:访问?url?的网页,获取网页内容并返回
????参数:目标网页的?url
????返回:目标网页的?html?内容
????'''
????headers?=?{
????????'accept':?'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
????????'user-agent':?'Mozilla/5.0?(Windows?NT?10.0;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/68.0.3440.106?Safari/537.36',
????}
????r?=?requests.get(url,headers=headers)
????r.raise_for_status()
????r.encoding?=?r.apparent_encoding
????return?r.text
def?getPageList(year,?month,?day):
????'''
????功能:获取当天报纸的各版面的链接列表
????参数:年,月,日
????'''
????url?=?'http://paper.people.com.cn/rmrb/html/'?+?year?+?'-'?+?month?+?'/'?+?day?+?'/nbs.D110000renmrb_01.htm'
????html?=?fetchUrl(url)
????bsobj?=?bs4.BeautifulSoup(html,'html.parser')
????temp?=?bsobj.find('div',?attrs?=?{'id':?'pageList'})
????if?temp:
????????pageList?=?temp.ul.find_all('div',?attrs?=?{'class':?'right_title-name'})
????else:
????????pageList?=?bsobj.find('div',?attrs?=?{'class':?'swiper-container'}).find_all('div',?attrs?=?{'class':?'swiper-slide'})
????linkList?=?[]
????for?page?in?pageList:
????????link?=?page.a["href"]
????????url?=?'http://paper.people.com.cn/rmrb/html/'??+?year?+?'-'?+?month?+?'/'?+?day?+?'/'?+?link
????????linkList.append(url)
????return?linkList
def?getTitleList(year,?month,?day,?pageUrl):
????'''
????功能:获取报纸某一版面的文章链接列表
????参数:年,月,日,该版面的链接
????'''
????html?=?fetchUrl(pageUrl)
????bsobj?=?bs4.BeautifulSoup(html,'html.parser')
????temp?=?bsobj.find('div',?attrs?=?{'id':?'titleList'})
????if?temp:
????????titleList?=?temp.ul.find_all('li')
????else:
????????titleList?=?bsobj.find('ul',?attrs?=?{'class':?'news-list'}).find_all('li')
????linkList?=?[]
????for?title?in?titleList:
????????tempList?=?title.find_all('a')
????????for?temp?in?tempList:
????????????link?=?temp["href"]
????????????if?'nw.D110000renmrb'?in?link:
????????????????url?=?'http://paper.people.com.cn/rmrb/html/'??+?year?+?'-'?+?month?+?'/'?+?day?+?'/'?+?link
????????????????linkList.append(url)
????return?linkList
def?getContent(html):
????'''
????功能:解析?HTML?网页,获取新闻的文章内容
????参数:html?网页内容
????'''
????bsobj?=?bs4.BeautifulSoup(html,'html.parser')
????#?获取文章?标题
????title?=?bsobj.h3.text?+?'\n'?+?bsobj.h1.text?+?'\n'?+?bsobj.h2.text?+?'\n'
????#print(title)
????#?获取文章?内容
????pList?=?bsobj.find('div',?attrs?=?{'id':?'ozoom'}).find_all('p')
????content?=?''
????for?p?in?pList:
????????content?+=?p.text?+?'\n'
????#print(content)
????#?返回结果?标题+内容
????resp?=?title?+?content
????return?resp
def?saveFile(content,?path,?filename):
????'''
????功能:将文章内容?content?保存到本地文件中
????参数:要保存的内容,路径,文件名
????'''
????#?如果没有该文件夹,则自动生成
????if?not?os.path.exists(path):
????????os.makedirs(path)
????#?保存文件
????with?open(path?+?filename,?'w',?encoding='utf-8')?as?f:
????????f.write(content)
def?download_rmrb(year,?month,?day,?destdir):
????'''
????功能:爬取《人民日报》网站?某年?某月?某日?的新闻内容,并保存在?指定目录下
????参数:年,月,日,文件保存的根目录
????'''
????pageList?=?getPageList(year,?month,?day)
????for?page?in?pageList:
????????titleList?=?getTitleList(year,?month,?day,?page)
????????for?url?in?titleList:
????????????#?获取新闻文章内容
????????????html?=?fetchUrl(url)
????????????content?=?getContent(html)
????????????#?生成保存的文件路径及文件名
????????????temp?=?url.split('_')[2].split('.')[0].split('-')
????????????pageNo?=?temp[1]
????????????titleNo?=?temp[0]?if?int(temp[0])?>=?10?else?'0'?+?temp[0]
????????????path?=?destdir?+?'/'?+?year?+?month?+?day?+?'/'
????????????fileName?=?year?+?month?+?day?+?'-'?+?pageNo?+?'-'?+?titleNo?+?'.txt'
????????????#?保存文件
????????????saveFile(content,?path,?fileName)
def?gen_dates(b_date,?days):
????day?=?datetime.timedelta(days?=?1)
????for?i?in?range(days):
????????yield?b_date?+?day?*?i
def?get_date_list(beginDate,?endDate):
????"""
????获取日期列表
????:param?start:?开始日期
????:param?end:?结束日期
????:return:?开始日期和结束日期之间的日期列表
????"""
????start?=?datetime.datetime.strptime(beginDate,?"%Y%m%d")
????end?=?datetime.datetime.strptime(endDate,?"%Y%m%d")
????data?=?[]
????for?d?in?gen_dates(start,?(end-start).days):
????????data.append(d)
????return?data
if?__name__?==?'__main__':
????'''
????主函数:程序入口
????'''
????#?输入起止日期,爬取之间的新闻
????beginDate?=?input('请输入开始日期:')
????endDate?=?input('请输入结束日期:')
????destdir?=?input("请输入数据保存的地址:")
????data?=?get_date_list(beginDate,?endDate)
????for?d?in?data:
????????year?=?str(d.year)
????????month?=?str(d.month)?if?d.month?>=10?else?'0'?+?str(d.month)
????????day?=?str(d.day)?if?d.day?>=10?else?'0'?+?str(d.day)
????????destdir?=?destdir??#?爬下来的文件的存储地方
????????download_rmrb(year,?month,?day,?destdir)
????????print("爬取完成:"?+?year?+?month?+?day)
????????time.sleep(3)????????#?怕被封?IP?爬一爬缓一缓,爬的少的话可以注释掉
print("本月数据爬取完成!")
2、??注意:
①本爬虫只能爬取人民日报网页版上可查看的日期的内容,具体范围,参考原网站:http://paper.people.com.cn/rmrb
②开始日期和结束日期格式为:20200101 20200102(这样保存的是2020年1月1日的内容)
③由于反爬原因,本程序并不能保证每次都会顺利全部爬取下来,这个概率很小
3、其他方案
考虑到很多朋友对程序更小白,不习惯使用代码来操作。提供两种备选方案。
①、我已经将上述代码封装成了exe文件,在Windows电脑上可以直接运行这个爬虫,自主选择需要爬取的范围。
下载地址:https://nebula.lanzous.com/ieH5ijxmwub
②我已经把我爬取下来的人民日报txt文件打包分享了,每月更新一次,有需要的,可以直接下载使用。
下载地址:Github:https://github.com/caspiankexin/people-daily-crawler-date
二:对人民日报的内容进行数据提取
“语象观察”需要的数据非常简单,就是统计一个关键词在文章中出现了几次。难度再于“语象观察”分析的文章字数经常会在十万和百万级,关键词上百个,还得是对多个文件进行操作,传统方法无法应付。
1、准备关键词名单
关键词名单的准备一定程度上属于非技术难题,这里需要的是看你要统计文章中哪个词语出现的次数,可以是国家各级领导人的名单,也可以是要研究对比的政治性术语,名单的制作看个人需要制作。当然一些关键词名单还是需要爬虫来实现更加方便,但这不属于本项目的教学范围,不进行讨论。
我在这里准备了两个关键词名单来作说明:“中国省份名单.txt”,“外国政要名单.txt”,关键词名单内容格式为每行一个。如图所示:
内容总结
以上是互联网集市为您收集整理的通过python来实现“语象观察“自动化进阶版全部内容,希望文章能够帮你解决通过python来实现“语象观察“自动化进阶版所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。