数据采集技术的发展经历了以下阶段:
在处理无限滚动页面时,传统爬虫面临三大挑战:
架构图
[代理 IP 池] → [请求控制中心] → [动态渲染模块]
↓
[数据清洗引擎] ← [API 解析器] ← [反爬绕过机制]
page
参数模拟滚动加载,获取完整数据。import requests
import json
from fake_useragent import UserAgent
class WeiboHotSearchCrawler:
def __init__(self):
# 代理服务器配置 参考亿牛云爬虫代理
self.proxy_host = "proxy.16yun.com"
self.proxy_port = "9020"
self.proxy_user = "16YUN"
self.proxy_pass = "16IP"
# 动态 User-Agent 生成器
self.ua = UserAgent()
# 微博 API 入口
self.base_url = "https://weibo.com/ajax/feed/hottimeline"
# 微博登录 Cookie(需定期更新)
self.cookie = "您的微博登录 Cookie"
def get_proxies(self):
"""构造代理 IP 认证信息"""
proxy_meta = f"http://{self.proxy_user}:{self.proxy_pass}@{self.proxy_host}:{self.proxy_port}"
return {"http": proxy_meta, "https": proxy_meta}
def generate_headers(self):
"""生成 HTTP 请求头"""
return {
"User-Agent": self.ua.random,
"Cookie": self.cookie,
"Referer": "https://weibo.com",
"X-Requested-With": "XMLHttpRequest"
}
def parse_hotsearch(self, data):
"""解析微博热搜数据"""
results = []
for item in data['data']['statuses']:
parsed = {
"rank": item['rank'], # 热搜排名
"title": item['title_desc'], # 热搜标题
"read_count": item['read'], # 阅读量
"discussion_count": item['discussion'], # 讨论量
"category": item['category'], # 话题分类
"content": item['text_raw'], # 话题内容
"comments": [c['text'] for c in item['comments']] # 评论内容
}
results.append(parsed)
return results
def crawl(self, pages=5):
"""执行爬取任务"""
all_data = []
for page in range(1, pages+1):
params = {"pageid": "100808", "group_id": "102803", "page": page}
try:
response = requests.get(
self.base_url,
params=params,
headers=self.generate_headers(),
proxies=self.get_proxies(),
timeout=15
)
if response.status_code == 200:
page_data = self.parse_hotsearch(response.json())
all_data.extend(page_data)
print(f"成功获取第 {page} 页数据,当前总计 {len(all_data)} 条")
else:
print(f"请求异常,状态码:{response.status_code}")
except Exception as e:
print(f"第 {page} 页请求失败:{str(e)}")
return all_data
if __name__ == "__main__":
crawler = WeiboHotSearchCrawler()
hot_data = crawler.crawl(pages=3)
with open("weibo_hotsearch.json", "w", encoding="utf-8") as f:
json.dump(hot_data, f, ensure_ascii=False)
方案类型 | 请求成功率 | 数据完整率 | 封禁概率 |
---|---|---|---|
传统采集 | 62% | 34% | 78% |
本方案 | 98% | 91% | 3.2% |
无代理方案 | 43% | 28% | 100% |
测试环境:微博平台,24 小时压力测试,样本量 N=5000 次请求。
某舆情监测平台采用本方案后:
page
参数模拟滚动加载。本方案已在多个商业分析系统中验证,日均处理请求量超过 2 万次,持续稳定运行超过 1 个月。建议根据业务需求调整分页深度和采集频率,以避免对目标网站造成过大压力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。