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

Python实现微博关键词爬虫

1.背景介绍

随着社交媒体的广泛应用,微博上的海量数据成为了很多研究和分析的重要信息源。为了方便获取微博的相关内容,本文将介绍如何使用Python编写一个简单的爬虫脚本,从微博中抓取指定关键词的相关数据,并将这些数据保存为Excel文件。本文将以关键词“樊振东”为例,展示从微博抓取该关键词相关数据的全过程。

废话不多说,先上结果图。

2. 项目实现思路

该爬虫通过向微博的搜索接口发送HTTP请求,获取与指定关键词相关的微博数据,并使用BeautifulSoup进行网页解析,将解析后的数据存储到Pandas DataFrame中,最后保存为Excel文件。整个项目分为以下几个步骤:

  • 设置请求头信息和cookie,模拟浏览器访问;
  • 根据指定日期范围抓取每天的微博内容;
  • 解析网页,提取发布者、内容、转发数、评论数、点赞数等信息;
  • 将数据存储为Excel文件(可根据自己的需求更换保存格式)

3.代码

1.导入相关的包,设置headers参数(cookies参数需要更改成自己浏览器的cookies);
import datetime
from time import sleep
import pandas as pd
import requests
from bs4 import BeautifulSoup
import copyheaders

# 模拟请求头,设置cookie等信息
headers = copyheaders.headers_raw_to_dict(b"""
Cookie:SCF=AryfLlAySr5dtuzHiOK7FmpLA_PYzO6fAyNLqHX07u0nVChBj3WtMAFGmado-IlJWOnJkTquNJuxX8pMuh_x4Wk.;
SUB=_2A25LrZcaDeRhGeBH4lIV-SrLzzqIHXVowpbSrDV8PUNbmtB-LUTWkW9NQbWyO1B36EDQGBy28OXoMRu67OFLhiMO;
SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWQ9A123FRnzhjZaYxL0RDv5NHD95Qc1K.7Sh.XS0BcWs4Dqcjci--fi-2Xi-24i--RiK.0iKL2i--RiKn4i-zEi--NiKLWiKnXi--4iK.fiKLhi--fi-82iK.7;
ALF=02_1725002826;
WBPSESS=kp-mRCDleWeLlB7ocAtWjgJpLwY-7s0o28OfmKxGr-vVEN9zU_M04E2V7vR8bHNGUkdOr1fGGH2XEMAup-6R2PDUjOcXLxlhRMq6F6VcYF67rgcxegC8hR0n0X1josnpQ9N0k5rdHLY5-sDsM0MxWw==;
XSRF-TOKEN=CWIcgDBSCGTzTuU1RDrnF-lT
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0
""")
2.设置关键词以及爬取时间范围,并将日期转换为标准格式;
# 设置关键词、起始日期和截止日期
keywords = "樊振东"
initial_time = '2024-07-26'
deadline = '2024-08-06'

data = []  # 用于存储爬取到的数据
date_list = []
frequency = 0

# 生成日期列表
new_time = datetime.datetime.strptime(initial_time, "%Y-%m-%d")
date = initial_time
while date <= deadline:
    date_list.append(date)
    new_time = new_time + datetime.timedelta(1)
    date = new_time.strftime("%Y-%m-%d")
3.解析数据并保存;
    for page in range(1, int(pages) + 1):
        sleep(1)  # 防止被封禁,设置爬取间隔
        new_url = f'https://s.weibo.com/weibo?q={keywords}&typeall=1&suball=1&timescope=custom%3A{time}-0%3A{time}-23&Refer=g&page={page}'
        new_th = requests.get(url=new_url, headers=headers).text
        knapsack = BeautifulSoup(new_th, 'lxml')
        data_list = knapsack.find_all('div', class_="card")
        no = knapsack.find('div', class_="card card-no-result s-pt20b40")

        # 解析每一条微博信息
        if no is None:
            for i in data_list:
                dic = {}
                try:
                    dic['发布者id'] = i.find('div', class_="info").find('a', target="_blank").text
                    itme = str(i.find('div', class_="from").text).replace('
', '').replace(' ', '').replace('来自', '').split('?')
                    dic['发布时间'] = itme[0]
                    dic['出处'] = itme[1]
                    dic['转发数'] = str(i.find_all('a', class_="woo-box-flex woo-box-alignCenter woo-box-justifyCenter")[-3].text).replace(' ', '')
                    dic['点赞数'] = str(i.find_all('span', class_="woo-like-count")[-1].text).replace(' ', '')
                    dic['评论数'] = str(i.find_all('a', class_="woo-box-flex woo-box-alignCenter woo-box-justifyCenter")[-2].text).replace(' ', '')
                    txt = str(i.find('p', class_="txt").text).replace('
', '').replace(' ', '').replace('?', '').replace('收起', '')
                    dic["内容"] = txt
                    frequency += 1
                    data.append(dic)
                except Exception as e:
                    break

# 数据保存到Excel
df = pd.DataFrame(data)
df.to_excel(f'{keywords}.xlsx', index=False)

4.代码说明

大家给以根据自己的需求更改代码;

有问题联系zx_luckfe;


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

相关文章:

  • Linux 基于共享内存的循环队列实现
  • 服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程
  • Rocky Linux 9.4 安装 VirtualBox 7.1
  • 数据库索引使用 B+树和Java TreeMap 使用红黑树的原因
  • 硬件学习笔记--44 电磁兼容试验-8 振铃波试验介绍
  • 26. 未来一瞥:量子计算
  • HCIA项目实践--静态路由的综合实验
  • 【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘
  • JDK1.8新特性面试题
  • 使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
  • 【limit 1000000,10 加载很慢该怎么优化?】
  • FPGA之​​​​​​​​​​​​​​HRBANK与HOBANK有什么区别?
  • HTTP入门
  • Go语言的错误处理error
  • Redis 09章——哨兵(sentinel)
  • 【Elasticsearch】多字段查询方式汇总
  • SQL CHECK 语句详解
  • 硬件学习笔记--43 电磁兼容试验-7 浪涌试验介绍
  • solidworks零件的绘制学习
  • 阿里云上线 DeepSeek,AI 领域再掀波澜