Python学习笔记(10)——舆情数据评分系统搭建

python学习笔记(10)——舆情数据评分系统搭建

网络舆情是以网络为载体,以事件为核心,是广大网民情感、态度、意见、观点的表达,传播与互动,以及后续影响力的集合。 带有广大网民的主观性,未经媒体验证和包装,直接通过多种形式发布于互联网上。(来自网络百科)


对于进一步筛选新闻,爬取更有用的信息,【舆情数据评分系统】是一个有用的工具



一、舆情数据评分系统1.0——根据标题评分

代码练习:

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 = '<h3 class="news-title_1YtI1"><a 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')

运行结果:
在这里插入图片描述

二、舆情数据评分系统2.0——根据正文评分

代码练习:

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 = '<h3 class="news-title_1YtI1"><a 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')

运行结果:
在这里插入图片描述

三、舆情数据评分系统3.0——解决乱码以及处理非相关信息

代码练习:

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 = '<h3 class="news-title_1YtI1"><a 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='<p>(.*?)</p>'#进一步清理数据,由于非相关内容是<li>和</li>包围,所以选择<p></p>间内容可以避免干扰
        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金融大数据挖掘与分析》,如文中有侵权内容,请联系作者删除

  • 0
    点赞
  • 17
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论 1

打赏作者

Ama_tor

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值