Python 获取微博用户信息及作品(完整版)

news/2024/11/26 4:52:16/

        在当今的社交媒体时代,微博作为一个热门的社交平台,蕴含着海量的用户信息和丰富多样的内容。今天,我将带大家深入了解一段 Python 代码,它能够帮助我们获取微博用户的基本信息以及下载其微博中的相关素材,比如图片等。

结果展示(文末附完整代码):

目录

结果展示(文末附完整代码):

一、代码整体介绍

二、代码准备与环境搭建

三、Weibo类的初始化方法(__init__)

1. 设置请求头(headers)

2. 设置 Cookies

四、获取用户基本信息的方法(Get和parse_user_info)

1. Get方法

2. parse_user_info方法

五、解析用户作品相关信息的方法(parse_statuses)

1. parse_statuses方法概述

2. 请求数据

3. 解析数据

六、创建文件夹路径并下载素材的方法(create_folder_path和download_video_with_requests)

1. create_folder_path方法

2. download_video_with_requests方法

七、运行代码(Run方法)

八、总结

全部代码:

注意:


一、代码整体介绍

        我们先来看一下这段代码的整体结构。这段代码定义了一个名为Weibo的类,在这个类中包含了多个方法,每个方法都承担着特定的功能,共同协作实现了从获取用户信息到解析并下载相关素材的完整流程。

二、代码准备与环境搭建

        在开始详细讲解代码功能之前,确保你已经安装了以下必要的库:

  • os:用于操作系统相关的操作,比如创建文件夹等。
  • random:虽然在这段代码中可能没有明显体现其主要作用,但它是 Python 中常用的随机数处理库,说不定在后续扩展功能时会用到哦。
  • re:正则表达式库,用于处理文本中的匹配等操作,不过在当前代码的主要逻辑里暂时未突出其作用。
  • requests:这是一个非常重要的库,用于发送 HTTP 请求,我们通过它来与微博的服务器进行交互,获取数据。
  • tqdm:用于在控制台显示进度条,让我们能直观地看到下载等操作的进度情况。

        如果你还没有安装这些库,可以通过以下命令在命令行中进行安装(假设你已经安装了 Python 并且配置好了相应的环境):

pip install requests tqdm

三、Weibo类的初始化方法(__init__

        当我们创建Weibo类的实例时,首先会执行__init__方法。这个方法主要做了两件重要的事情:

1. 设置请求头(headers

        请求头是我们在向微博服务器发送请求时附带的一些信息,它告诉服务器我们的客户端相关情况,比如使用的浏览器类型、版本等。在这段代码中,设置了如下的请求头信息:

self.headers = {
'填入你的headers'
}

        这些信息模仿了一个常见的浏览器请求设置,有助于我们顺利地从微博服务器获取数据,避免因为请求头设置不当而被服务器拒绝访问。

2. 设置 Cookies

        Cookies 是服务器在我们访问网页时发送给客户端的一些小数据块,它可以保存一些用户相关的信息,比如登录状态等。在代码中,我们设置了如下的 Cookies 信息:

self.cookies = {'填入你的cookies'
}

        这里的 Cookies 信息应该是在你之前登录微博或者通过其他合法途径获取到的,它能让服务器识别我们的身份或者提供一些特定的权限,以便获取更多的用户相关数据。

四、获取用户基本信息的方法(Getparse_user_info

1. Get方法

   Get方法接受一个参数uid,这个参数就是微博用户的 ID。在这个方法中,我们首先构建了一个请求的 URL,用于获取用户的基本信息:

url = "https://weibo.com/ajax/profile/info"
params = {"uid": uid
}
response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()
self.parse_user_info(response)

        这里通过requests库发送了一个 GET 请求到指定的 URL,并带上了设置好的请求头、Cookies 以及用户 ID 作为参数。获取到响应后,我们将其转换为 JSON 格式,然后调用parse_user_info方法来进一步解析这些数据。

2. parse_user_info方法

        这个方法主要负责解析从服务器获取到的用户基本信息。它从响应数据中提取出了以下关键信息:

  • 用户名称:通过Weibo_name = response.get('data').get('user').get('screen_name')获取。
  • 用户粉丝数量:followers_count = response.get('data').get('user').get('followers_count')
  • 用户关注数量:follow_count = response.get('data').get('user').get('friends_count')
  • 用户描述信息:description = response.get('data').get('user').get('description')
  • 用户微博认证信息:verified_reason = response.get('data').get('user').get('verified_reason')
    最后,还会将这些提取到的信息打印出来,方便我们查看:
print(Weibo_name, followers_count, follow_count, description, verified_reason)

五、解析用户作品相关信息的方法(parse_statuses

1. parse_statuses方法概述

   parse_statuses方法同样接受用户 ID 作为参数uid,它的主要目的是获取和解析用户发布的微博作品相关信息,比如微博内容、发布时间、包含的图片等。

2. 请求数据

        首先,构建请求的 URL 和参数:

url = "https://weibo.com/ajax/statuses/mymblog"
params = {"uid": uid,"page": "0","feature": "0"
}
response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()

        这里向另一个用于获取用户微博作品的 URL 发送了 GET 请求,并获取到响应数据,同样将其转换为 JSON 格式。

3. 解析数据

        获取到响应后,从数据中提取出了以下重要信息:

  • 微博内容(原始文本):text_raw = statuses.get('text_raw')
  • 发布时间:created_at = statuses.get('created_at')
  • 图片 ID 列表:pic_ids = statuses.get('pic_ids')
  • 地区名称:region_name = statuses.get('region_name')
    并且对于图片 ID 列表中的每一个图片 ID,还会进一步获取其最大尺寸的图片 URL:
i = []
for pic_id in pic_ids:pic_infos_urls = statuses.get('pic_infos').get(pic_id).get('largest').get('url')i.append(pic_infos_urls)

        最后,会将这些提取到的信息(微博内容、发布时间、图片 URL 列表、地区名称)打印出来,并调用create_folder_path方法来处理这些信息,以便后续下载相关素材。

六、创建文件夹路径并下载素材的方法(create_folder_pathdownload_video_with_requests

1. create_folder_path方法

        这个方法首先根据获取到的微博用户名称创建一个以用户名为名称的主文件夹(如果不存在的话):

materials_dir = Weibo_name
if not os.path.exists(materials_dir):os.makedirs(materials_dir)

        然后根据微博内容的前两个字符创建一个子文件夹,用于存放相关素材:

folder_name = str(title[:2])
folder_path = os.path.join(materials_dir, folder_name)
if not os.path.exists(folder_path):os.makedirs(folder_path)

        最后,调用download_video_with_requests方法,将创建好的文件夹路径和图片 URL 列表作为参数传递过去,以便下载图片素材。

2. download_video_with_requests方法

        这个方法负责实际的图片下载操作。它通过遍历图片 URL 列表,使用requests库发送请求获取图片数据,并将其保存到指定的文件夹路径下。在下载过程中,还使用了tqdm库来显示下载进度条,让我们能清楚地看到下载的进度情况。

try:j = 1for url in tqdm(i, desc="下载素材进度"):response = requests.get(url)image_name = f'{j}.{url[-3:]}'  # 图片名称为数字+扩展名j += 1  # 累加计数器image_path = os.path.join(save_path, image_name)if response.status_code == 200:with open(image_path, 'wb') as f:total_size = int(response.headers.get('content-length', 0))block_size = 1024  # 每次写入的块大小progress_bar = tqdm(total=total_size, unit='iB', unit_scale=True)f.write(response.content)progress_bar.update(len(response.content))progress_bar.close()print(f"素材 {image_name} 已成功下载到 {save_path}")else:print(f"下载素材 {image_name} 失败,状态码: {response.status_code}")
except requests.exceptions.RequestException as e:print(f"下载素材时出错: {e}")

七、运行代码(Run方法)

        最后,我们来看一下Run方法。这个方法是整个程序的入口点,当我们直接运行脚本时,就会执行这个方法。在这个方法中,首先会提示用户输入要获取信息的微博用户 ID:

uid = int(input('请输入你要获取信息的id:'))

        然后依次调用Get方法和parse_statuses方法,来完成获取用户基本信息和解析用户作品相关信息以及下载相关素材的整个流程。

八、总结

全部代码:

# -*- coding:utf-8 -*-
import os
import random
import re
import requests
from tqdm import tqdmclass Weibo(object):def __init__(self):self.headers = {}self.cookies = {}# 传参uid输入用户id来获取数据def Get(self, uid):url = "https://weibo.com/ajax/profile/info"params = {"uid": uid}response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()self.parse_user_info(response)def parse_user_info(self, response):"""解析用户基本信息"""global Weibo_name# 获取用户名称Weibo_name = response.get('data').get('user').get('screen_name')# 获取用户粉丝数量followers_count = response.get('data').get('user').get('followers_count')# 获取用户关注数量follow_count = response.get('data').get('user').get('friends_count')# 获取用户描述信息description = response.get('data').get('user').get('description')# 获取用户微博认证信息verified_reason = response.get('data').get('user').get('verified_reason')# 打印数据print(Weibo_name, followers_count, follow_count, description, verified_reason)def parse_statuses(self, uid):"""解析用户作品相关信息"""url = "https://weibo.com/ajax/statuses/mymblog"params = {"uid": uid,"page": "0","feature": "0"}response = requests.get(url, headers=self.headers, cookies=self.cookies, params=params).json()statuses_list = response.get('data').get('list')since_id = response.get('data').get('since_id')print(since_id)for statuses in statuses_list:text_raw = statuses.get('text_raw')created_at = statuses.get('created_at')pic_ids = statuses.get('pic_ids')print(pic_ids)region_name = statuses.get('region_name')i = []for pic_id in pic_ids:pic_infos_urls = statuses.get('pic_infos').get(pic_id).get('largest').get('url')i.append(pic_infos_urls)print(text_raw, created_at, i, region_name)self.create_folder_path(text_raw,i)def create_folder_path(self, title,i):materials_dir = Weibo_nameif not os.path.exists(materials_dir):os.makedirs(materials_dir)folder_name = str(title[:2])folder_path = os.path.join(materials_dir, folder_name)if not os.path.exists(folder_path):os.makedirs(folder_path)self.download_video_with_requests(folder_path,i)def download_video_with_requests(self, save_path, i):try:j = 1for url in tqdm(i, desc="下载素材进度"):response = requests.get(url)image_name = f'{j}.{url[-3:]}'  # 图片名称为数字+扩展名j += 1  # 累加计数器image_path = os.path.join(save_path, image_name)if response.status_code == 200:with open(image_path, 'wb') as f:total_size = int(response.headers.get('content-length', 0))block_size = 1024  # 每次写入的块大小progress_bar = tqdm(total=total_size, unit='iB', unit_scale=True)f.write(response.content)progress_bar.update(len(response.content))progress_bar.close()print(f"素材 {image_name} 已成功下载到 {save_path}")else:print(f"下载素材 {image_name} 失败,状态码: {response.status_code}")except requests.exceptions.RequestException as e:print(f"下载素材时出错: {e}")def Run(self):uid = int(input('请输入你要获取信息的id:'))self.Get(uid)self.parse_statuses(uid)if __name__ == '__main__':spider = Weibo()spider.Run()

        通过以上对这段 Python 代码的详细讲解,我们可以看到它能够实现从微博获取用户基本信息以及下载用户微博中相关素材的功能。当然,在实际使用过程中,你可能需要根据自己的需求对代码进行一些调整和扩展,比如处理更多类型的素材、优化错误处理等。希望这篇教程能帮助你更好地理解和运用这段代码,让你在获取微博数据方面更加得心应手。

注意:

        在使用本代码获取微博数据时,请务必遵守相关法律法规以及微博平台的使用规则和服务协议。本代码仅用于学习和研究目的,不得用于任何非法的商业用途或侵犯他人隐私、权益的行为。若因不当使用本代码而导致的任何法律纠纷或不良后果,使用者需自行承担全部责任。在进行数据抓取操作之前,请确保你已经充分了解并获得了合法的授权与许可,尊重网络平台的生态环境和其他用户的合法权益。



http://www.ppmy.cn/news/1549982.html

相关文章

Mac下的vscode远程ssh免密码登录

Mac下的vscode远程ssh免密码登录(同理可迁移至windows及linux系统) 在日常开发中,使用远程服务器进行开发是非常常见的,而通过 SSH 免密码登录可以显著提高效率,避免每次连接时都需要输入密码。本文将介绍如何在 macOS…

深度学习:神经网络中线性层的使用

深度学习:神经网络中线性层的使用 在神经网络中,线性层(也称为全连接层或密集层)是基础组件之一,用于执行输入数据的线性变换。通过这种变换,线性层可以重新组合输入数据的特征,并将其映射到新…

H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏

在数字化时代,流媒体播放器已成为信息传播和娱乐消遣的主流载体。随着技术的进步,流媒体播放器的核心技术和发展趋势不断演变,影响着整个行业的发展方向。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持…

Mysql的加锁情况详解

最近在复习mysql的知识点,像索引、优化、主从复制这些很容易就激活了脑海里尘封的知识,但是在mysql锁的这一块真的是忘的一干二净,一点映像都没有,感觉也有点太难理解了,但是还是想把这块给啃下来,于是想通…

SpringMVC接收请求参数

(5)请求参数》五种普通参数 1.普通参数 代码块 RequestMapping("/commonParam") ResponseBody public String commonParam(String name,int age){System.out.println("普通参数传递 name > "name);System.out.println("普通…

量化交易系统开发-实时行情自动化交易-4.2.3.指数移动平均线实现

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说指数移动平均线实现。 …

Golang语言系列-Channel

Golang语言系列-Channel 源码分析结构体定义和构造函数发送操作接受操作关闭操作select 操作 实验参考 golang里的channel信道是golang里一个独特的概念,基于消息通信的方式来实现并发控制。信道有两种类型,缓存型和非缓存型,其中缓冲型底层基…

Python Selenium:Web自动化测试与爬虫开发

Python Selenium:Web自动化测试与爬虫开发 Python Selenium:Web自动化测试与爬虫开发安装Selenium设置WebDriver基础示例页面元素交互处理JavaScript和Cookies浏览器控制屏幕截图Headless Mode结束会话错误处理与调试 ***本文由AI辅助生成*** Python Se…