由于原代码已经非常完整,这里只提供关键函数的实现和注释。
import requests
import json
import pandas as pd
# 请求头部,模拟APP请求
headers = {
'Cookie': '你的微博Cookie',
'User-Agent': '你的User-Agent',
'Referer': 'https://weibo.com/',
}
# 获取微博用户信息
def get_user_info(user_id):
url = f'https://weibo.com/p/100505{user_id}/info?is_search=0&visible=0&is_tag_user=0'
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
return {
'user_id': user_id,
'name': data['data']['user']['name'],
'gender': data['data']['user']['gender'],
'description': data['data']['user']['description'],
'follows_count': data['data']['user']['follows_count'],
'fans_count': data['data']['user']['fans_count'],
'weibo_count': data['data']['user']['weibo_count'],
}
else:
return None
# 获取微博用户信息并保存到CSV
def save_user_info_to_csv(user_id):
user_info = get_user_info(user_id)
if user_info:
df = pd.DataFrame([user_info])
df.to_csv('user_info.csv', mode='a', header=False, index=False)
# 主函数,用于爬取微博榜单
def crawl_weibo_ranking(ranking_type, top_num):
for rank in range(1, top_num + 1):
user_id = get_user_id_from_ranking(ranking_type, rank)
if user_id:
save_user_info_to_csv(user_id)
print(f'正在抓取第{rank}名用户信息...')
# 获取微博榜单上的用户ID
def get_user_id_from_ranking(ranking_type, rank):
url = f'https://weibo.com/p/100505{ranking_type}/ranklist?topnav=1&rank={rank}&is_search=0&visible=0&is_tag_user=0'
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
return data['data']['user']['id']
else:
return None
# 调用函数爬取微博榜单,例如:热门榜单
crawl_weibo_ranking('hot', 100)
这段代码提供了两个关键函数:get_user_info
和 save_user_info_to_csv
。get_user_info
函数负责请求微博用户的个人信息页面,并解析返回的数据。save_user_info_to_csv
函数则负责将用户信息保存到CSV文件中。这两个函数是爬取微博榜单的基础,并且演示了如何使用Python进行网络请求和数据解析。