当前位置: 首页 > article >正文

Python爬虫实战:自动抓取微博热搜并根据帖子生成词云图

概述

本项目主要实现以下功能:

  • 自动登录微博
  • 抓取热搜榜前10条热搜
  • 进入每个热搜话题页面抓取相关微博内容
  • 对内容进行分词处理

5. 生成词云图并保存

使用的主要库

1. Selenium

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

Selenium是一个强大的网页自动化测试工具,在爬虫中主要用于:

  • 模拟浏览器行为
  • 处理动态加载的页面
  • 执行JavaScript
  • 等待页面元素加载

2. jieba

import jieba

jieba是优秀的中文分词库,特点:

  • 支持中文分词
  • 可以识别新词
  • 支持繁体分词
  • 支持自定义词典

3. WordCloud

from wordcloud import WordCloud

WordCloud用于生成词云图,特点:

  • 支持自定义字体
  • 可调整图片大小
  • 支持设置背景颜色
  • 可以设置最大显示词数

4. matplotlib

import matplotlib.pyplot as plt

matplotlib是Python的绘图库,这里用于:

  • 显示词云图
  • 设置图片标题
  • 保存图片文件

代码实现思路

1. 浏览器配置

options = webdriver.ChromeOptions()

options.add_argument('--disable-blink-features=AutomationControlled')

options.add_argument('--window-size=1920,1080')

options.add_argument('user-agent=Mozilla/5.0...')

  • 设置浏览器参数
  • 添加反爬虫措施
  • 设置窗口大小和User-Agent

2. 获取热搜列表

def get_hot_search_items():

    try:

        items = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.data tr')))

        return items

    except:

        # 多个备选选择器...

- 使用显式等待确保页面加载

  • 多个备选选择器增加稳定性
  • 异常处理确保程序稳定运行

3. 处理热搜话题

for topic in topics_to_process:

    driver.get(topic['link'])

    # 获取微博内容

    posts = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.content')))

    content_text = ''

    for post in posts[:20]:

        content_text += post.text + '\n'

  • 访问每个话题页面
  • 获取相关微博内容
  • 限制获取数量避免过度请求

4. 生成词云

wordcloud = WordCloud(

    font_path='simhei.ttf',

    width=800,

    height=400,

    background_color='white',

    max_words=100

).generate(text)

- 使用中文字体

  • 设置合适的图片大小
  • 限制词云中词的数量

运行效果

运行后,程序会:

  • 打开浏览器等待手动登录
  • 自动访问热搜榜
  • 依次处理每个热搜话题
  • 为每个话题生成词云图片

注意事项

1. 需要安装所有必要的库:

pip install selenium beautifulsoup4 jieba wordcloud matplotlib

  • 确保Chrome浏览器和ChromeDriver版本匹配
  • 需要准备中文字体文件(simhei.ttf)

4. 首次运行需要手动登录微博

完整代码放到账号绑定的git地址

可能的改进方向

  • 添加自动登录功能
  • 优化词云图的显示效果
  • 添加数据存储功能
  • 增加定时任务功能
  • 添加代理IP池

总结

这个项目综合运用了多个Python库,实现了网页爬虫、文本处理和数据可视化。通过这个项目,我们可以直观地了解微博热点话题的关键词分布,对舆情分析和热点追踪有一定帮助。

希望这个项目对大家有帮助!如果有任何问题,欢迎在评论区讨论。

---

如果觉得文章有帮助,请点赞收藏,关注我获取更多Python实战项目!


http://www.kler.cn/a/562193.html

相关文章:

  • halcon三维点云数据处理(二十七)remove_bin_for_3d_object_localization
  • 【Linux】34.封装 UdpSocket(1)
  • LeetCode 热题 100 73. 矩阵置零
  • 【PyTorch][chapter 28][李宏毅深度学习][Diffusion Model-3]
  • Java使用EasyExcel实现异步导出
  • html - 手工添加上次阅读的位置, 方便下次阅读
  • 大语言模型安全测试:WDTA 标准下的全面解读与实践展望
  • 深入理解Redis:数据类型、事务机制及其应用场景
  • 前端项目配置 Nginx 全攻略
  • redis和mysqle辨析
  • 大语言模型的不足与研究热点
  • 2.部署kafka:9092
  • DeepSeek为云厂商带来新机遇,东吴证券看好AI带动百度智能云增长
  • 异常——及处理方式
  • 取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票
  • 【vLLM】【基准测试】:vLLM部署大模型的基准测试
  • RTSP协议
  • Starlink卫星动力学系统仿真建模第十讲-基于SMC和四元数的卫星姿态控制示例及Python实现
  • Cesium@1.126.0,创建3D瓦片,修改样式
  • 「软件设计模式」责任链模式(Chain of Responsibility)