当前位置:主页 > 学新知识 > 使用爬虫技术从今日头条获取社会热点

使用爬虫技术从今日头条获取社会热点

时间:2024-05-11 00:54:27 作者:
摘要:文章浏览阅读1.1k次。本文将介绍如何使用爬虫技术从今日头条获取社会热点和舆情分析的方法和步骤。获取今日头条的首页内容,包括标题、链接、标签、评论数等信息根据标题内容进行文本分析

为了获取今日头条的首页内容,我们需要使用爬虫技术模拟浏览器访问网站,并解析网页源码中的数据。由于今日头条采用了动态加载和反爬虫机制,我们需要使用一些高级的爬虫技术,如Selenium、BeautifulSoup、亿牛云爬虫代理等。

Selenium是一个自动化测试工具,可以模拟用户操作浏览器,实现动态加载网页。BeautifulSoup是一个HTML解析库,可以方便地提取网页中的数据。亿牛云爬虫代理是一个专业的代理服务商,可以提供高速稳定的代理IP,避免被目标网站封禁。

以下是使用Python语言编写的爬虫代码:

# 导入相关库
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置亿牛云爬虫代理的域名、端口、用户名、密码
proxy_host = "www.16yun.cn"
proxy_port = "9020"
proxy_user = "16YUN"
proxy_pass = "16IP"
# 构造代理认证字符串
proxy_meta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host": proxy_host,
    "port": proxy_port,
    "user": proxy_user,
    "pass": proxy_pass,
}
# 设置Chrome浏览器选项,使用代理服务器和无头模式(不显示界面)
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % proxy_meta)
chrome_options.add_argument('--headless')
# 创建Chrome浏览器对象
driver = webdriver.Chrome(options=chrome_options)
# 访问今日头条首页
driver.get("https://www.toutiao.com/")
# 等待页面加载完成,并找到“查看更多”按钮
more_button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//div[@class="y-box more-mode"]/a'))
)
# 定义一个空列表,用于存储爬取的数据
data_list = []
# 定义一个循环次数,用于控制爬取的数量
loop_count = 10
# 循环点击“查看更多”按钮,加载更多内容
for i in range(loop_count):
    # 点击按钮
    more_button.click()
    # 等待页面加载完成,并找到所有的新闻条目
    news_items = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, '//div[@class="y-box container"]/div[@class="y-left index-content"]//div[@class="single-mode-rbox-inner"]'))
    )
    # 遍历每个新闻条目,提取数据
    for item in news_items:
        # 创建一个空字典,用于存储单个新闻的数据
        data_dict = {}
        # 提取标题
        title = item.find_element_by_xpath('.//a/div/div[1]/span').text
        data_dict['title'] = title
        # 提取链接
        link = item.find_element_by_xpath('.//a').get_attribute('href')
        data_dict['link'] = link
        # 提取标签
        tag = item.find_element_by_xpath('.//a/div/div[2]/div[1]/span').text
        data_dict['tag'] = tag
        # 提取评论数
        comment = item.find_element_by_xpath('.//a/div/div[2]/div[2]/span[2]').text
        data_dict['comment'] = comment
        # 将单个新闻的数据添加到列表中
        data_list.append(data_dict)
    # 打印当前循环次数和列表长度,用于监控爬虫进度
    print(f"Loop {i+1}, list length: {len(data_list)}")
# 关闭浏览器对象
driver.quit()
# 打印爬取的数据列表,用于查看结果
print(data_list)

根据标题内容进行文本分析

为了对标题内容进行文本分析,我们需要使用一些自然语言处理的技术,如jieba、SnowNLP、gensim等。

jieba是一个中文分词库,可以将标题内容切分成单个词语,方便后续的处理。SnowNLP是一个中文情感分析库,可以根据标题内容判断其情感倾向,返回一个0到1之间的数值,越接近1表示越积极,越接近0表示越消极。gensim是一个主题建模库,可以根据标题内容提取其主题,返回一个包含主题词和权重的列表。

以下是使用Python语言编写的文本分析代码:

# 导入相关库
import jieba
from snownlp import SnowNLP
from gensim import corpora, models
# 定义一个空列表,用于存储标题内容
title_list = []
# 遍历爬取的数据列表,提取标题内容,并添加到列表中
for data in data_list:
    title = data['title']
    title_list.append(title)
# 使用jieba对标题内容进行分词,并去除停用词
stopwords = set(open('stopwords.txt', encoding='utf-8').read().splitlines()) # 读取停用词文件,转换为集合
words_list = [] # 定义一个空列表,用于存储分词结果
for title in title_list:
    words = jieba.lcut(title) # 对标题进行分词
    words = [word for word in words if word not in stopwords] # 去除停用词
    words_list.append(words) # 将分词结果添加到列表中
# 使用SnowNLP对标题内容进行情感分析,并计算平均情感倾向
sentiment_list = [] # 定义一个空列表,用于存储情感分析结果
sentiment_sum = 0 # 定义一个变量,用于累计情感倾向值
for title in title_list:
    s = SnowNLP(title) # 创建SnowNLP对象
    sentiment = s.sentiments # 获取情感倾向值
    sentiment_list.append(sentiment) # 将情感倾向值添加到列表中
    sentiment_sum += sentiment # 累加情感倾向值
sentiment_avg = sentiment_sum / len(title_list) # 计算平均情感倾向值
# 使用gensim对标题内容进行主题建模,并提取前10个主题
dictionary = corpora.Dictionary(words_list) # 创建字典对象
corpus = [dictionary.doc2bow(words) for words in words_list] # 将分词结果转换为词袋表示
lda = models.LdaModel(corpus, num_topics=10, id2word=dictionary) # 创建LDA模型对象,并指定主题数为10
topics = lda.print_topics(num_words=5) # 提取前10个主题,并指定每个主题包含5个词
# 打印文本分析的结果,用于查看效果
print(f"Average sentiment: {sentiment_avg}")
print("Top 10 topics:")
for topic in topics:
    print(topic)

根据评论数进行排序,筛选出热度较高的内容

为了根据评论数进行排序,筛选出热度较高的内容,我们需要对爬取的数据列表进行处理,将评论数转换为整数,并按照降序排列。然后,我们可以选择前10个或前20个内容,作为社会热点的代表。

以下是使用Python语言编写的排序和筛选代码:

# 定义一个函数,用于将评论数转换为整数
def comment_to_int(comment):
    # 如果评论数包含“万”字,表示是以万为单位的
    if '万' in comment:
        # 去除“万”字,并转换为浮点数
        comment = float(comment.replace('万', ''))
        # 乘以10000,得到实际的评论数,并转换为整数
        comment = int(comment * 10000)
    # 否则,直接转换为整数
    else:
        comment = int(comment)
    # 返回转换后的评论数
    return comment
# 使用列表推导式,对爬取的数据列表中的每个元素,调用上述函数,将评论数转换为整数,并添加到新的列表中
data_list_new = [{'title': data['title'], 'link': data['link'], 'tag': data['tag'], 'comment': comment_to_int(data['comment'])} for data in data_list]
# 使用sorted函数,对新的列表进行排序,按照评论数降序排列,并赋值给新的变量
data_list_sorted = sorted(data_list_new, key=lambda x: x['comment'], reverse=True)
# 定义一个变量,用于指定筛选的数量
top_n = 10
# 使用切片操作,从排序后的列表中选择前top_n个元素,并赋值给新的变量
data_list_top = data_list_sorted[:top_n]
# 打印筛选后的数据列表,用于查看结果
print(data_list_top)

根据标签进行分类,统计不同类别的内容数量和占比

为了根据标签进行分类,统计不同类别的内容数量和占比,我们需要对爬取的数据列表进行处理,将标签作为键,内容数量作为值,构建一个字典。然后,我们可以使用matplotlib、seaborn等可视化库,绘制饼图或柱状图,展示不同类别的内容数量和占比。

以下是使用Python语言编写的分类和统计代码:

# 导入相关库
import matplotlib.pyplot as plt
import seaborn as sns
# 定义一个空字典,用于存储标签和内容数量的映射关系
tag_dict = {}
# 遍历爬取的数据列表,提取标签,并更新字典中的内容数量
for data in data_list:
    tag = data['tag']
    # 如果标签已经在字典中,将其对应的值加一
    if tag in tag_dict:
        tag_dict[tag] += 1
    # 否则,将标签作为键,1作为值,添加到字典中
    else:
        tag_dict[tag] = 1
# 打印标签和内容数量的字典,用于查看结果
print(tag_dict)
# 使用matplotlib设置画布大小和风格
plt.figure(figsize=(10, 10))
plt.style.use('ggplot')
# 使用seaborn绘制饼图,并添加标题和图例
sns.pieplot(data=tag_dict, x=tag_dict.keys(), y=tag_dict.values(), autopct='%1.1f%%')
plt.title('Distribution of Content Categories')
plt.legend()
# 显示图像
plt.show()

根据情感倾向进行分析,评估不同类别的内容的正负面情绪

为了根据情感倾向进行分析,评估不同类别的内容的正负面情绪,我们需要对文本分析的结果进行处理,将情感倾向值和标签进行匹配,构建一个新的列表。然后,我们可以使用pandas、seaborn等数据分析和可视化库,计算不同类别的内容的平均情感倾向值,并绘制箱线图,展示不同类别的内容的情感分布。

以下是使用Python语言编写的情感分析代码:

# 导入相关库
import pandas as pd
import seaborn as sns
# 定义一个空列表,用于存储情感倾向值和标签的组合
sentiment_tag_list = []
# 遍历爬取的数据列表和情感分析结果列表,提取情感倾向值和标签,并添加到列表中
for data, sentiment in zip(data_list, sentiment_list):
    tag = data['tag']
    sentiment_tag_list.append((sentiment, tag))
# 使用pandas创建数据框对象,并指定列名
df = pd.DataFrame(sentiment_tag_list, columns=['sentiment', 'tag'])
# 使用pandas按照标签分组,并计算每个组的平均情感倾向值
df_grouped = df.groupby('tag').mean()
# 打印分组后的数据框,用于查看结果
print(df_grouped)
# 使用seaborn绘制箱线图,并添加标题和轴标签
sns.boxplot(data=df, x='tag', y='sentiment')
plt.title('Sentiment Analysis of Different Content Categories')
plt.xlabel('Category')
plt.ylabel('Sentiment')
# 显示图像
plt.show()

根据主题进行分析,发现不同类别的内容的主要话题和趋势

为了根据主题进行分析,发现不同类别的内容的主要话题和趋势,我们需要对主题建模的结果进行处理,将主题词和权重和标签进行匹配,构建一个新的字典。然后,我们可以使用wordcloud等可视化库,绘制词云图,展示不同类别的内容的主要话题。

以下是使用Python语言编写的主题分析代码:

# 导入相关库
from wordcloud import WordCloud
# 定义一个空字典,用于存储标签和主题词及权重的映射关系
tag_topic_dict = {}
# 遍历爬取的数据列表和主题建模结果列表,提取标签和主题词及权重,并更新字典中的值
for data, topic in zip(data_list, topics):
    tag = data['tag']
    # 如果标签已经在字典中,将其对应的值与主题词及权重合并
    if tag in tag_topic_dict:
        tag_topic_dict[tag] += topic[1]
    # 否则,将标签作为键,主题词及权重作为值,添加到字典中
    else:
        tag_topic_dict[tag] = topic[1]
# 打印标签和主题词及权重的字典,用于查看结果
print(tag_topic_dict)
# 使用wordcloud创建词云对象,并指定字体、背景颜色、最大词数等参数
wc = WordCloud(font_path='simhei.ttf', background_color='white', max_words=50)
# 遍历字典中的每个键值对,绘制词云图,并添加标题
for tag, topic in tag_topic_dict.items():
    # 使用词云对象生成词云图
    wc.generate_from_text(topic)
    # 添加标题
    plt.title(f'Top Topics of {tag}')
    # 显示图像
    plt.imshow(wc)
    plt.show()

结语

本文介绍了如何使用爬虫技术从今日头条获取社会热点和舆情分析的方法和步骤。通过使用Selenium、BeautifulSoup、亿牛云爬虫代理等高级爬虫技术,我们可以成功地爬取和分析了今日头条的首页内容,包括标题、链接、标签、评论数等信息。通过使用jieba、SnowNLP、gensim等自然语言处理技术,我们可以对标题内容进行文本分析,提取关键词、情感倾向、主题等特征。通过使用matplotlib、seaborn、wordcloud等可视化库,我们可以对不同类别的内容进行排序、分类、情感分析、主题分析等,展示社会热点和舆情分析的结果。本文的目的是为了演示如何使用爬虫技术从今日头条获取社会热点和舆情分析,仅供参考和学习,感谢你的阅读和支持。

相关阅读

  • 终身学习是一种怎样的体验?

    终身学习是一种怎样的体验?

    终身学习是一种生活和学习态度,也就是活到老学到老。终身学习是我们每个人都应该养成的学习习惯。首先,终身学习可以提高我们自身的学习效率和能力。学习就像滚雪球一样...

  • 最喜人间烟火气,且以凡心度流年

    最喜人间烟火气,且以凡心度流年

    汪曾祺曾说:四方食事,不过一碗人间烟火。这人间最袅绕缤纷、最至繁至简的是烟火气,这人间最深入人心、最难舍难分的也是烟火气..._新浪网...

  • 澳大利亚打工机会多吗?澳大利亚安全吗?

    澳大利亚打工机会多吗?澳大利亚安全吗?

    这期将是斯威本科技大学学姐继续为我们分享留学生非常关心的问题:澳大利亚打工机会多吗?澳大利亚安全吗?澳大利亚打工机会多吗?MIA:澳大利亚留学生每两周有40个小时的打工时间...

  • 中国科技五年攻克21项难题,迎来全面大爆发!

    中国科技五年攻克21项难题,迎来全面大爆发!

    技术突破在过去的五年里,攻克了21项关键技术,其中半导体领域的专利申请数量占据了全球的55%。这在科技创新方面取得了显著进展,尤其是在半导体行业...

  • 我90后,7年前来到澳大利亚,这里无论你是否有钱,生活差别不大

    我90后,7年前来到澳大利亚,这里无论你是否有钱,生活差别不大

    这是我们讲述的第2385位真人故事我叫谢婉萍becky,90后南京人,目前在澳大利亚工作。为了追求国外的体验和环境,我在大学本科毕业后,选择了参加澳大利亚的打工度假项目。...

  • 终身学习是一种怎样的体验?

    终身学习是一种怎样的体验?

    终身学习是一种生活和学习态度,也就是活到老学到老。终身学习是我们每个人都应该养成的学习习惯。首先,终身学习可以提高我们自身的学习效率和能力。学习就像滚雪球一样...

  • 最喜人间烟火气,且以凡心度流年

    最喜人间烟火气,且以凡心度流年

    汪曾祺曾说:四方食事,不过一碗人间烟火。这人间最袅绕缤纷、最至繁至简的是烟火气,这人间最深入人心、最难舍难分的也是烟火气..._新浪网...

  • 唐朝诡事录(全集)

    唐朝诡事录(全集)

    魏风华创作的小说小说《唐朝诡事录(全集)》,已更新23章,最新章节:第23章 附录:唐代志怪传奇与笔记小说要录。唐朝的夜空,除了李白的明月...

  • 民航发展政策高级研修班

    民航发展政策高级研修班

    近年来,广东省机场管理集团公司在民航局、省国资委的领导下,扎实开展“平安民航”建设,落实责任、情报引导、全面防范、强化应急,不断提高机场安全工作的能力和水平...

  • 微信小程序制作今日头条页面

    微信小程序制作今日头条页面

    文章浏览阅读1.7k次,点赞36次,收藏18次。此代码仅仅只是一个类似今日头条页面的示例,实际操作将会从服务器上请求资源数据,以及有更加复杂的需求,这只能相当于一个丐版页面...

  • 青少年科普知识宣传活动方案.docx

    青少年科普知识宣传活动方案.docx

    《青少年科普知识宣传活动方案》篇一青少年科普知识宣传活动方案一、活动背景在信息爆炸的时代,青少年作为国家的未来,其科学素养的培养至关重要。然而,随着科技的快速.....

发表评论

登录后才能评论

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件举报,一经查实,本站将立刻删除。