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实战项目!