超简单,只需4步爬取女神微博评论

数据库 MySQL
想去微博爬微博评论拿来做数据分析,拿以前写的代码用发现跑不起来了然后用浏览器登录微博看了下请求过程,发现规则确实变了。以前可以直接看到数据接口,现在变复杂多了。

 想去微博爬微博评论拿来做数据分析,拿以前写的代码用发现跑不起来了

[[316726]]

然后用浏览器登录微博看了下请求过程,发现规则确实变了。以前可以直接看到数据接口,现在变复杂多了。

咋办呢?

吭呲吭呲从0开始分析?那样太低效了。

你遇到的坑肯定很多人都遇到过,这个时候我们就没必要自己重新去踩了。直接从他们填好的坑上走过去就好了,过蜀道如平川。

这里教你一个方法,4步爬取微博评论。

第一步:百度/Google

用搜素引擎搜关键字“微博评论爬虫 python”, 基本上第一页的结果都是最近一年写的文章,有一定时效性,太早的文章就直接忽略。随便打开两篇你能看懂的文章,记住,看不懂不是你的问题,是作者没写明白。

我搜到简书上的一篇文章,地址:https://www.jianshu.com/p/8dc04794e35f , 不过按照她的方式操作已经不起效了,因为微博的评论数据获取方式改了,但是发现了一个很重要的线索。

第二步:分析验证

虽然数据不再是通过接口的方法返回的,但是老接口还能用https://m.weibo.cn/api/comments/show?id={id}&page={page} , 这里的id是某条微博的id, page 是分页参数。

于是尝试用这个接口去获取数据

 

确实能拿到数据,一共有40多万条数据,每页10条,41336页。当你正喜出望外的时候,却发现只能获取最近50页的数据。把 page 参数改成 51 就不行了。

 

不难理解,这种分页方式在MySQL中是效率非常低效的,特别是遇到数据非常的时候,所以用这种方式拿不到全部分页的数据是情理之中的。

幸好,还有一个新接口,https://m.weibo.cn/comments/hotflow?mid=4477013081328252&max_id=330569188932643&max_id_type=0

这个接口也能拿到评论,mid 是某条微博的参数, max_id 是分页参数,这个参数可以从一个请求返回的数据中拿到

 

第三步:写代码、测试

数据获取的原理搞懂了, 就可以通过代码来实现,几十万条数据就能唰唰的爬下来。

为了能够更好的做分析处理,我决定叫数据保存到MongoDB,它的好处就不介绍了,反正就是省事。

直接上代码吧!

 

  1. ""
  2. 爬取微博评论,保存到数据库 
  3.  
  4. https://m.weibo.cn/api/comments/show?id=4477013081328252&page=50 
  5. 该接口能获取微博的前50页数据,每页10条, id 是某条微博的id 
  6.  
  7. https://m.weibo.cn/comments/hotflow?mid=4477013081328252&max_id=330569188932643&max_id_type=0 
  8. 此接口能爬到所有评论信息, mid 是某条微博id, max_id 是上一个请求返回的分页参数, max_id_type 固定为0就好 
  9. ""
  10.  
  11. from pymongo import MongoClient 
  12. import requests 
  13. import time 
  14.  
  15. __author__ = 'liuzhijun' 
  16.  
  17. headers = { 
  18.     "Host""m.weibo.cn"
  19.     "User-Agent""Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) " 
  20.                   "Version/9.0 Mobile/13B143 Safari/601.1"
  21.     "Cookie""xxxxx" # 这里将浏览器的cookie复制过来进行了。 
  22.  
  23. client = MongoClient('mongodb://localhost:27017/'
  24. db = client['weibo'
  25.  
  26. def main(mid, max_id): 
  27.     ""
  28.     :param mid: 某条微博id 
  29.     :param max_id: 分页参数 
  30.     :return
  31.     ""
  32.     url = "https://m.weibo.cn/comments/hotflow?max_id_type=0" 
  33.     params = {"mid": mid} 
  34.     if max_id: 
  35.         params['max_id'] = max_id 
  36.  
  37.     res = requests.get(url, params=params, headers=headers) 
  38.     print(res.content) 
  39.     result = res.json() 
  40.     max_id = result.get("data").get("max_id"
  41.     data = result.get('data').get('data'
  42.     for item in data: 
  43.         db['comment'].insert_one(item) 
  44.  
  45.     if max_id: 
  46.         time.sleep(1) 
  47.         main(mid, max_id) 
  48.  
  49. if __name__ == '__main__'
  50.     main("4477013081328252", None) 

 

最后数据整齐划一保存在数据库中

 

剩下的时候就可以做分析了

第4步:关注公众号

这一步是可选项。核心代码就那么几行,是不是觉得特别简单,如果你会写HelloWorld,那么这个代码对你来说也不难嘛,这对做产品、做运营的时候来说,简直就是救命药。再也不要求程序员哥哥要数据了。

把这边文章分享给你身边的朋友,关注我一起搞数据啊。。。

责任编辑:华轩 来源: Python之禅
相关推荐

2021-07-01 22:05:31

Python微博评论

2017-08-01 17:02:19

代码Python数据

2020-03-09 08:00:43

娱乐圈肖战评论

2021-06-02 22:18:11

Python关键词微博

2015-05-11 17:30:22

苹果库克

2021-11-09 09:46:09

ScrapyPython爬虫

2021-11-08 14:38:50

框架Scrapy 爬虫

2021-07-13 08:09:34

微博推特评论

2011-04-11 16:37:21

2020-04-27 21:19:21

小米MIUI12

2019-08-28 09:28:07

SSHOpenSSH运维

2018-06-11 08:20:42

微博评论菊姐

2019-04-28 14:24:54

吴亦凡流量数据

2020-02-27 14:40:03

Python分析微博

2017-10-10 15:42:56

Python鹿晗关晓彤

2017-11-20 09:46:08

python爬虫Scrapy

2022-07-12 09:55:34

Selenium爬取数据

2016-09-21 13:17:31

LibreOfficeJava缓冲区

2021-03-02 07:02:45

Linux操作系统

2020-12-14 10:42:51

Windows 10Windows微软
点赞
收藏

51CTO技术栈公众号