网络舆情是以网络为载体,以事件为核心,是广大网民情感、态度、意见、观点的表达,传播与互动,以及后续影响力的集合。 带有广大网民的主观性,未经媒体验证和包装,直接通过多种形式发布于互联网上。(来自网络百科)
对于进一步筛选新闻,爬取更有用的信息,【舆情数据评分系统】是一个有用的工具
代码练习:
import requests#引用requests库
import re#引用re库
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
#自定义baidu()函数
def baidu(company):
url='https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word='+company
res=requests.get(url,headers=headers).text
p_source = '新闻来源:(.*?)"'
p_date = '发布于:(.*?)"'
p_href = '
p_title = '标题:(.*?)"'
source=re.findall(p_source, res, re.S)
date=re.findall(p_date, res, re.S)
href=re.findall(p_href, res, re.S)
title=re.findall(p_title, res, re.S)
#舆情数据评分系统——根据标题
score = []#定义一个空列表
keywords = ['违约', '诉讼', '兑付', '阿里', '百度', '腾讯', '京东', '互联网']#设置关键词清单
for i in range(len(title)):#遍历标题
num = 0#设定初始分为0
for k in keywords:#循环判断计算新闻评分
if k in title[i]:
num -= 5#出现一个关键词扣5分
score.append(num)#评分写入列表
#数据评分打印
for i in range(len(title)):
print(str(i + 1) + '.' + title[i] + '(' + date[i] + '-' + source[i] + ')')
print(href[i])
print(company+'该条舆情评分为'+str(score[i]))#由于评分为数据,要转换为字符串再拼接
companys = ['阿里巴巴', '万科集团', '京东','百度','腾讯']
for i in companys:
try:#try/except异常处理语句避免程序异常中断
baidu(i)
print(i + '百度新闻爬取成功'+'\n'+'\n')
except:
print(i+'百度新闻爬取失败'+'\n'+'\n')
代码练习:
import requests#引用requests库
import re#引用re库
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
#自定义baidu()函数
def baidu(company):
url='https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word='+company
res=requests.get(url,headers=headers).text
p_source = '新闻来源:(.*?)"'
p_date = '发布于:(.*?)"'
p_href = '
p_title = '标题:(.*?)"'
source=re.findall(p_source, res, re.S)
date=re.findall(p_date, res, re.S)
href=re.findall(p_href, res, re.S)
title=re.findall(p_title, res, re.S)
#舆情数据评分系统——根据标题
score = []#定义一个空列表
keywords = ['违约', '诉讼', '兑付', '阿里', '百度', '腾讯', '京东', '互联网']#设置关键词清单
for i in range(len(title)):#遍历标题
num = 0#设定初始分为0
#爬取正文
try:
article=requests.get(href[i],headers=headers,timeout=10).text
except:
article='单个新闻爬取失败'
#根据正文和标题进行评分
for k in keywords:#循环判断计算新闻评分
if (k in title[i])or(k in article):
num -= 5
score.append(num)#评分写入列表
#数据评分打印
for i in range(len(title)):
print(str(i + 1) + '.' + title[i] + '(' + date[i] + '-' + source[i] + ')')
print(href[i])
print(company+'该条舆情评分为'+str(score[i]))#由于评分为数据,要转换为字符串再拼接
companys = ['阿里巴巴', '万科集团', '京东','百度','腾讯']
for i in companys:
try:#try/except异常处理语句避免程序异常中断
baidu(i)
print(i + '百度新闻爬取成功'+'\n'+'\n')
except:
print(i+'百度新闻爬取失败'+'\n'+'\n')
代码练习:
import requests#引用requests库
import re#引用re库
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
#自定义baidu()函数
def baidu(company):
url='https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word='+company
res=requests.get(url,headers=headers).text
p_source = '新闻来源:(.*?)"'
p_date = '发布于:(.*?)"'
p_href = '
p_title = '标题:(.*?)"'
source=re.findall(p_source, res, re.S)
date=re.findall(p_date, res, re.S)
href=re.findall(p_href, res, re.S)
title=re.findall(p_title, res, re.S)
#舆情数据评分系统——根据标题
score = []#定义一个空列表
keywords = ['违约', '诉讼', '兑付', '阿里', '百度', '腾讯', '京东', '互联网']#设置关键词清单
for i in range(len(title)):#遍历标题
num = 0#设定初始分为0
#爬取正文
try:
article=requests.get(href[i],headers=headers,timeout=10).text
except:
article='单个新闻爬取失败'
#乱码问题解决代码
try:
article=article.encode('ISO-8859-1').decode('utf-8')#首先尝试用ISO-8859-1编码,utf-8解码
except:
try:
article=article.encode('ISO-8859-1').decode('gbk')#再尝试用ISO-8859-1编码,gbk解码
except:
article=article#如上述方法失败则输出源码
#处理非相关信息,如热门新闻等插播的与正文无关的内容
p_article='(.*?)
'#进一步清理数据,由于非相关内容是和 包围,所以选择间内容可以避免干扰
article_main=re.findall(p_article,article)#获取正文内容
article=''.join(article_main)#将列表转换为字符串
#根据正文和标题进行评分
for k in keywords:#循环判断计算新闻评分
if (k in title[i])or(k in article):
num -= 5
score.append(num)#评分写入列表
#数据评分打印
for i in range(len(title)):
print(str(i + 1) + '.' + title[i] + '(' + date[i] + '-' + source[i] + ')')
print(href[i])
print(company+'该条舆情评分为'+str(score[i]))#由于评分为数据,要转换为字符串再拼接
companys = ['阿里巴巴', '万科集团', '京东','百度','腾讯']
for i in companys:
try:#try/except异常处理语句避免程序异常中断
baidu(i)
print(i + '百度新闻爬取成功'+'\n'+'\n')
except:
print(i+'百度新闻爬取失败'+'\n'+'\n')
免责声明:代码练习相关内容和方法参考《python金融大数据挖掘与分析》,如文中有侵权内容,请联系作者删除