Bootstrap

新浪新闻动态网页爬取+热点词云分析

新浪新闻动态网页爬取+热点词云分析

实验内容

在这里插入图片描述
这里不用管拓展视频是什么,视频涉及的内容很浅显。

在日常生活中,我们经常见到“年度热词”,你会好奇这究竟是怎么得到的?

我们最常见的思路就是,计算机通过分析大数据得到的。

下面我用这个例子展示一下详细过程

上代码

代码都有注解,懂的都懂!

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import jieba
from wordcloud import WordCloud
from imageio import imread
import matplotlib.pyplot as plt

def getSinaNews(pages):
    # 要爬取的网页
    url = 'https://news.sina.com.cn/roll/'
    # 获取无界面浏览器
    # chrome_options = webdriver.ChromeOptions()
    # chrome_options.add_argument('--headless')
    # browser = webdriver.Chrome(options=chrome_options)
    # 有界面模式
    browser = webdriver.Chrome()
    # 爬
    news_list = ''
    while pages > 0:
        try:
            browser.get(url)
            news = browser.find_elements_by_xpath('//*[@id="d_list"]/ul/li/span/a')
            # 将爬取到的所有新闻标题放到一个String中
            for i in news:
                news_list = news_list + str(i.text)
        except NoSuchElementException:
            print('NoSuchElementException')
            browser.close()
            continue
        # 找到下一页按钮,并点击
        '''//*[@id="d_list"]/div/span[15]/a'''
        browser.find_element_by_xpath('//*[@id="d_list"]/div/span/a').click()
        pages = pages - 1

    browser.quit()
    return news_list


def createWordCloud(news_list):
    bg_image = imread("bg.jpg")
    stopwords = [line.strip() for line in open('StopWords.txt', encoding='utf-8').readlines()]
    mytext = jieba.cut(news_list, cut_all=False)
    wt = " /".join(mytext)
    # 设置词云相关参数
    word_cloud = WordCloud(
        # 设置背景颜色
        background_color="white",
        # 设置最大显示的字数
        max_words=200,
        # 设置背景图片
        mask=bg_image,
        # 此处添加停用词库
        stopwords=stopwords,
        # 设置中文字体,词云默认字体是“DroidSansMono.ttf字体库”,不支持中文
        font_path="SimHei.ttf",
        # 设置字体最大值
        max_font_size=500,
        # 设置有多少种随机生成状态,即有多少种配色方案
        random_state=30,
        # 轮廓线宽度
        contour_width=3,
        # 轮廓线颜色
        contour_color='steelblue',
    )
    mycloud = word_cloud.generate(wt)  # 生成词云

    # 设置生成图片的标题
    plt.title('WordCloudOfSina')  # 必须得用英文,否则报错且不显示
    plt.imshow(mycloud)
    # 设置是否显示 X、Y 轴的下标
    plt.axis("off")
    plt.show()



if __name__ == '__main__':
    page = eval(input('请输入要爬取的页面数量:'))
    news_list = getSinaNews(page)
    createWordCloud(news_list)



代码中涉及的图片,这张图片是在网上随便找的,主要是为了充当词云背景使用。
在这里插入图片描述

里面还涉及好几个文件,我全都放到百度网盘,需要自取
链接:https://pan.baidu.com/s/1tlXOUitV7BKrAygdali4jg
提取码:v3ad
复制这段内容后打开百度网盘手机App,操作更方便哦

步骤分析

  1. 首先需要明白,并不是所有的网站都是可以让你爬的。有些网站的源代码只有你访问他才给你渲染生成。所以,万无一失的方法就是让计算机模拟人来进行自动化访问。
  2. 这里使用的是selenium库中的内容。可以实现页面自动跳转。
  3. 在寻找要爬取的内容时,可以使用浏览器的检查功能。首先F12打开检查,然后按照图中次序进行操作,第一步点击,第二步点击,完成1、2步之后会定位到3这个位置,在3的基础上右键

在这里插入图片描述

在这里插入图片描述

  1. 这样可以得到下面的注释部分!,通过观察里面的数字部分去掉就是他的“通项公式:“在这里插入图片描述

实验结果

在这里插入图片描述

;