当前位置:   article > 正文

2022爬取微博评论-极简40行代码_爬取微博评论代码

爬取微博评论代码

 思路找到用户评论内容的位置,分析各个xhr里的不同,解析html,提取一页数据,通过循环判断拿到整条微博评论内容的数据,存储数据。

分析:网页源代码未找到评论相关的内容,打概率是通过异步加载的,把挡位调到Fetch/XHR,一个个打开在预览里查看,在buildComments里开头的能找到,从负载里明显看到几个xhr的不同:

1,第一个的数据只有6行数据,其余都是8行,且第一个没有max_id和flow的数据

2.中间的max_id每个不同,且最后一个xhr的max_id =0 

 

 

 

 很明显这数据很容易通过json拿到,包括用户 id 日期 评论内容等

 上代码:

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

cooking为了登录 爬取更多数据,ua和cooking涉及隐私不展示了

  1. mid ="" #因为第一页没有max_id ,用来判断,这里不要设置成None
  2. while True: #循环
  3. if mid == "":
  4. n_url = 'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id=4834998496528837&is_show_bulletin=2&is_mix=0&count=10&uid=1720962692'
  5. elif mid ==0: #最后一页的max_id = 0用来结束循环
  6. break
  7. else:
  8. 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"
  9. resp = requests.get(url=n_url, headers=headers)
  10. datas = resp.json()['data']
  11. print(datas)
  12. mid = resp.json()['max_id']
  13. print(mid)
  14. time.sleep(3)
  15. for data in datas:
  16. dit = {
  17. '用户id': data['user']['id'],
  18. '用户': data['user']['screen_name'],
  19. '评论日期': data['created_at'],
  20. '评论内容': data['text_raw']
  21. }
  22. csv_writer.writerow(dit)

 完成展示下结果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57005
推荐阅读
相关标签
  

闽ICP备14008679号