技術路線
- 獲取登錄 Cookie:手動登錄
https://photo.qzone.qq.com,開發者工具 Application → Cookies 導出 p_skey、uin 等關鍵字段。
- 請求相冊列表/評論接口:分析網頁版請求,通常為
GET https://h5.qzone.qq.com/proxy/domain/photo.qzone.qq.com/cgi-bin/...,參數含 uin、album_id、page。
- 攜帶 Cookie 發送請求:Python
requests / Java HttpClient 設置 Cookie Header。
- 解析 JSON/HTML:響應多為 JSONP 或 HTML 片段,用
re/json.loads/BeautifulSoup 提取評論內容、時間、用戶。
- 分頁循環:直到
has_more=false 或返回空列表。
Python 最小示例
import requests, re, json, time
cookies = {
'uin': 'o123456789',
'p_skey': 'abcdefg...',
# ... 其他必要 cookie
}
headers = {'User-Agent': 'Mozilla/5.0 ...', 'Referer': 'https://photo.qzone.qq.com/'}
def fetch_comments(album_id, page=1):
url = 'https://h5.qzone.qq.com/proxy/domain/photo.qzone.qq.com/cgi-bin/cgi_list_comment'
params = {'uin': '123456789', 'album_id': album_id, 'page': page, 'num': 20}
r = requests.get(url, params=params, cookies=cookies, headers=headers)
# 響應為 JSONP: _Callback({...})
data = json.loads(re.search(r'\((.*)\)', r.text).group(1))
return data.get('data', {}).get('comments', [])
all_comments = []
page = 1
while True:
comments = fetch_comments('ALBUM_ID', page)
if not comments: break
all_comments.extend(comments)
page += 1
time.sleep(1) # 禮貌延遲
# 保存
with open('comments.json', 'w', encoding='utf-8') as f:
json.dump(all_comments, f, ensure_ascii=False, indent=2)
法律與道德提醒
- 僅供個人學習/備份自身數據,嚴禁大規模抓取他人隱私、商業用途。
- 遵守
robots.txt、QQ 服務協議,控制頻率,避免封禁 IP/賬號。