赞
踩
分析:网页源代码未找到评论相关的内容,打概率是通过异步加载的,把挡位调到Fetch/XHR,一个个打开在预览里查看,在buildComments里开头的能找到,从负载里明显看到几个xhr的不同:
1,第一个的数据只有6行数据,其余都是8行,且第一个没有max_id和flow的数据
2.中间的max_id每个不同,且最后一个xhr的max_id =0


- import requests
- import csv #方便存储数据
- import time #防止被微博识别爬虫,让速度慢些
- f = open("微博评论1.csv",mode ='w',newline='',encoding='utf-8')
- csv_writer = csv.DictWriter(f,fieldnames=[
- '用户id',
- '用户',
- '评论日期',
- '评论内容'
- ])
- csv_writer.writeheader() #创建表头
- #加headers python访问微博时更像是人来操作,防止微博识别爬虫
- headers = {
- "cookie": "*****",
- "referer": "https://weibo.com/1720962692/MeGtbrorP",
- "user-agent": "*****",
- "x-requested-with": "XMLHttpRequest"
- }

cooking为了登录 爬取更多数据,ua和cooking涉及隐私不展示了
- mid ="" #因为第一页没有max_id ,用来判断,这里不要设置成None
- while True: #循环
- if mid == "":
- n_url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=4834998496528837&is_show_bulletin=2&is_mix=0&count=10&uid=1720962692'
- elif mid ==0: #最后一页的max_id = 0用来结束循环
- break
- else:
- n_url ="https://weibo.com/ajax/statuses/buildComments?flow=0&is_reload=1&id=4834998496528837&is_show_bulletin=2&is_mix=0&max_id="+str(mid)+"&count=20&uid=1720962692"
- resp = requests.get(url=n_url, headers=headers)
- datas = resp.json()['data']
- print(datas)
- mid = resp.json()['max_id']
- print(mid)
- time.sleep(3)
- for data in datas:
- dit = {
- '用户id': data['user']['id'],
- '用户': data['user']['screen_name'],
- '评论日期': data['created_at'],
- '评论内容': data['text_raw']
- }
- csv_writer.writerow(dit)


Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。