使用Python实现微博页面监控与内容自动保存

在当今信息爆炸的时代,微博作为中国最大的社交媒体平台之一,每天都有大量的信息产生。对于某些特定用户或话题的微博内容,我们可能希望进行实时监控并自动保存,以便后续分析或存档。本文将介绍如何使用Python编写一个脚本,实现监控特定微博页面并自动保存内容的功能。

1. 准备工作

在开始编写脚本之前,我们需要准备一些工具和库:

  • Python 3.x:确保你已经安装了Python 3.x版本。
  • requests库:用于发送HTTP请求,获取微博页面的HTML内容。
  • BeautifulSoup库:用于解析HTML内容,提取所需的信息。
  • schedule库:用于定时执行任务,定期检查微博页面是否有更新。

你可以通过以下命令安装这些库:

pip install requests beautifulsoup4 schedule

2. 获取微博页面内容

首先,我们需要编写一个函数来获取微博页面的HTML内容。由于微博页面是动态加载的,直接使用requests库获取的HTML内容可能不包含我们需要的所有信息。因此,我们可以使用微博的API接口来获取数据。

以下是一个简单的函数,用于获取微博页面的内容:

import requests

def get_weibo_content(user_id):
    url = f"https://m.weibo.cn/api/container/getIndex?type=uid&value={user_id}"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        return None

在这个函数中,我们使用了微博的API接口来获取指定用户的微博内容。`user_id`是微博用户的唯一标识符,可以通过微博页面的URL获取。

3. 解析微博内容

获取到微博页面的JSON数据后,我们需要解析这些数据,提取出我们感兴趣的内容,如微博文本、发布时间、点赞数等。

以下是一个解析微博内容的函数:

from bs4 import BeautifulSoup

def parse_weibo_content(data):
    weibo_list = data.get("data", {}).get("cards", [])
    weibo_contents = []
    for card in weibo_list:
        if card.get("card_type") == 9:
            mblog = card.get("mblog", {})
            text = mblog.get("text", "")
            created_at = mblog.get("created_at", "")
            reposts_count = mblog.get("reposts_count", 0)
            comments_count = mblog.get("comments_count", 0)
            attitudes_count = mblog.get("attitudes_count", 0)
            weibo_contents.append({
                "text": text,
                "created_at": created_at,
                "reposts_count": reposts_count,
                "comments_count": comments_count,
                "attitudes_count": attitudes_count
            })
    return weibo_contents

在这个函数中,我们遍历了微博的`cards`列表,提取了每条微博的文本内容、发布时间、转发数、评论数和点赞数,并将这些信息存储在一个字典中。

4. 保存微博内容

接下来,我们需要将解析后的微博内容保存到本地文件中。我们可以选择将内容保存为CSV文件,以便后续分析。

以下是一个保存微博内容的函数:

import csv

def save_weibo_content(weibo_contents, filename="weibo_content.csv"):
    with open(filename, mode="a", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        for content in weibo_contents:
            writer.writerow([
                content["text"],
                content["created_at"],
                content["reposts_count"],
                content["comments_count"],
                content["attitudes_count"]
            ])

在这个函数中,我们使用了Python的`csv`模块将微博内容写入CSV文件。每次调用这个函数时,新的微博内容会被追加到文件中。

5. 定时监控微博页面

为了实现定时监控微博页面的功能,我们可以使用`schedule`库来定期执行任务。以下是一个简单的定时任务设置:

import schedule
import time

def monitor_weibo(user_id):
    data = get_weibo_content(user_id)
    if data:
        weibo_contents = parse_weibo_content(data)
        save_weibo_content(weibo_contents)

# 每10分钟执行一次监控任务
schedule.every(10).minutes.do(monitor_weibo, user_id="123456789")

while True:
    schedule.run_pending()
    time.sleep(1)

在这个脚本中,我们设置了每10分钟执行一次`monitor_weibo`函数,监控指定用户的微博页面。`user_id`需要替换为你想要监控的微博用户的ID。

6. 总结

通过以上步骤,我们实现了一个简单的Python脚本,用于监控特定微博页面并自动保存内容。这个脚本可以定期检查微博页面是否有更新,并将新的微博内容保存到本地文件中。你可以根据需要进一步扩展这个脚本,例如添加更多的解析字段、设置不同的监控频率等。