根据关键词爬取资讯标题并绘制词云图

根据关键词爬取资讯的新闻标题/来源/发布时间/摘要,并根据标题绘制词云图。

import re
import requests
import pandas as pd
def getBaiDuAllNews(keyword):
    headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,'
                          '*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
                'Accept-Encoding': 'gzip, deflate, br',
                'Accept-Language': 'zh-CN,zh;q=0.9',
                'Cache-Control': 'max-age=0',
                'Connection': 'keep-alive',
                'Cookie': 'BIDUPSID=A9CF2B5EF23713E9B3AB7A1C14D4C39C; PSTM=1615628417; '
                          'BAIDUID=BFB5E80B14EAC333F6595234A98229D4:FG=1; '
                          'BDUSS'
                          '=VMyQ2dOVWNQY345S1FBa2hnVGstNjRIbWpKbFM3WnpHS1JRQmFvaXdyc3J3WHBnRVFBQUFBJCQAAAAAAAAAAAEAAAC0nX6jxuG62rDX0~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs0U2ArNFNgR; BDUSS_BFESS=VMyQ2dOVWNQY345S1FBa2hnVGstNjRIbWpKbFM3WnpHS1JRQmFvaXdyc3J3WHBnRVFBQUFBJCQAAAAAAAAAAAEAAAC0nX6jxuG62rDX0~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs0U2ArNFNgR; __yjs_duid=1_bc5d8acf3d5efe6396879160d8c1727b1618473293154; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_WISE_SIDS=107313_110085_127969_128698_164869_168389_175756_176678_177060_177094_177168_177370_177413_177474_178328_178602_178804_179348_179368_179402_179428_180407_180434_180435_180513_180641_180654_180757_180856_180870_181125_181218_181271_181370_181398_181428_181433_181582_181628_181646_181660_181667_181808_181827_181984_182025_182076_182194_182243_182258_182273_182331_182382_182412_182462_182550_182586_182612_182668; BDICON=10294984.98; BDPASSGATE=IlPT2AEptyoA_yiU4VKI3kIN8efRMPG4HB8JS5p63lStfCaWmhH3BrUzWz0HSieXBDP6wZTXdMsDxXTqXlVXa_EqnBsZolpOaSaXzKGoucHtVM69-t5yILXoHUE2sA8PbRhL-3MEF2ZELlMvcgjchQZrchW8z3IcnwL7hy47ifaADYjyZVm2r7m-Z9sJLCPAPNu594rXnEpKKSm0Ut0lTS8yqC1yM8gvzw0ag1A7A3D5rkoXGurSRvAa1Fz5BJV2BxCyGwC78qSo0-MvrpckVEIdnUSI7tC; delPer=0; SE_LAUNCH=5%3A1627379664; MSA_PBT=98; MSA_ZOOM=1056; BD_CK_SAM=1; BD_HOME=1; BAIDUID_BFESS=BFB5E80B14EAC333F6595234A98229D4:FG=1; COOKIE_SESSION=3839_0_9_9_25_6_0_0_9_2_1_0_3737_0_9_0_1627380134_0_1627380125%7C9%2316622_17_1627218664%7C9; BD_UPN=12314753; H_PS_645EC=c90a2NhsDXypUAYkVFE5oVmVt7WaXl0YOFIPxZuF1ec6LOHjc%2FW3M66duU4; BA_HECTOR=0081840h0k800k0k291gfvpcd0q; BDSVRTM=58; MSA_WH=300_634; MSA_PHY_WH=600_1268; wpr=0',
                'Host': 'www.baidu.com',
                'Referer': 'https://www.baidu.com/',
                'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
                'sec-ch-ua-mobile': '?1',
                'Sec-Fetch-Dest': 'document',
                'Sec-Fetch-Mode': 'navigate',
                'Sec-Fetch-Site': 'same-origin',
                'Sec-Fetch-User': '?1',
                'Upgrade-Insecure-Requests': '1',
                'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'}
    titles = []
    sources = []
    rtimes = []
    summaries = []
    pagenumber = 1
    
    while(True):
        num = (pagenumber - 1) * 10 
        url = 'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&ie=utf-8&word=' + keyword + '&pn=' + str(num)
        res = requests.get(url, headers=headers).text
        p_title = 'class="news-title_1YtI1 ".*?aria-label="标题:(.*?)"'
        p_source='class="news-source_Xj4Dv".*?aria-label="新闻来源:(.*?)"'
        p_rTime='class="news-source_Xj4Dv".*?aria-label="发布于:(.*?)"'
        p_summary='class="news-source_Xj4Dv".*?aria-label="摘要(.*?)"'
        titles+=re.findall(p_title,res,re.S) 
        sources+=re.findall(p_source,res,re.S)
        rtimes+=re.findall(p_rTime,res,re.S)
        summaries+=re.findall(p_summary,res,re.S)
        if res.find('下一页')==-1:
            break;
        else:
            pagenumber+=1
    print("共" + str(len(titles)) + "条相关新闻")
    return titles,sources,rtimes,summaries
    
titles,sources,rtimes,summaries = getBaiDuAllNews("足球") # 以足球关键词为例

共267条相关新闻

import wordcloud
import jieba
import numpy as np
from PIL import Image
text = ""
for i in titles:
    text += i + ","
w=wordcloud.WordCloud(
    height = 1000,
    width = 1800,
    background_color='white',# 背景颜色
    font_path="msyh.ttc", # 字体
    # 这里给出了一部分停用词,根据需要可再优化
    stopwords=["的","年","日","月","和","是","与","在","了","等","到","从","对","于","向","较","为","比","占","有","你","我","他"],# 停用词
    colormap = 'Reds'# 字体颜色
    )
w.generate(" ".join(jieba.lcut(text))) # jieba分词
w.to_file("新闻词云图.png")

更换关键字:篮球,R9000P,航运

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry_trans

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值