当前位置: 首页 > 科技观察

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

时间:2023-03-18 21:20:40 科技观察

想去微博爬取微博评论做数据分析,用我之前写的代码发现运行不了,然后用浏览器登录微博即可看完请求流程,发现规则确实变了。以前直接可以看到数据接口,现在复杂多了。我应该怎么办?从0开始分析?那太没效率了。你遇到的陷阱想必很多人都遇到过。这个时候,我们不需要再去踩它了。走过他们填的坑,过蜀道如平川。这里教大家一个方法,4步爬取微博评论。第一步:百度/谷歌用搜索引擎搜索关键字“微博评论爬虫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页数据。将页面参数更改为51将不起作用。不难理解,这种分页方式在MySQL中效率很低,尤其是在数据非常大的情况下,这种方式无法获取到所有分页数据也是情理之中的。还好有新接口,https://m.weibo.cn/comments/hotflow?mid=4477013081328252&max_id=330569188932643&max_id_type=0这个接口也可以获取评论,mid是微博参数,max_id是分页参数,该参数可以从请求返回的数据中获取。第三步:编写代码,测试数据采集原理。了解原理后,可以通过代码实现,可以爬取几十万条数据。为了能够更好的进行分析处理,我决定将数据保存到MongoDB中,其好处就不介绍了,反正就是省事。上传代码即可!"""抓取微博评论并存入数据库https://m.weibo.cn/api/comments/show?id=4477013081328252&page=50该接口可以获取微博前50页数据,每页10条,id为某微博idhttps://m.weibo.cn/comments/hotflow?mid=4477013081328252&max_id=330569188932643&max_id_type=0该接口可以抓取所有评论信息,mid为某微博id,max_id为上次请求返回的分页参数,max_id_type固定为0。"""frompymongoimportMongoClientimportrequestsimporttime__author__='liuzhijun'headers={"Host":"m.weibo.cn","User-Agent":"Mozilla/5.0(iPhone;CPUiPhoneOS9_1likeMacOSX)AppleWebKit/601.1.46(KHTML,likeGecko)""Version/9.0Mobile/13B143Safari/601.1","Cookie":"xxxxx"#??这里复制浏览器cookie。}client=MongoClient('mongodb://localhost:27017/')db=client['weibo']defmain(mid,max_id):""":parammid:一个微博id:parammax_id:页面参数:return:"""url="https://m.weibo.cn/comments/hotflow?max_id_type=0"params={"mid":mid}ifmax_id:params['max_id']=max_idres=requests.get(url,params=params,headers=headers)print(res.content)result=res.json()max_id=result.get("data").get("max_id")data=result.get('data').get('data')foritemindata:db['comment'].insert_one(item)ifmax_id:time.sleep(1)main(mid,max_id)if__name__=='__main__':main("4477013081328252",None)最后的数据就齐了保存在数据库中,其余时间分析。第四步:专注于公众号这一步是可选的。核心代码也就那么几行,你是不是觉得很简单,如果你会写HelloWorld,那么这段代码对你来说并不难,是产品和运营的救命良药。不再找程序员小哥要数据了。把这篇文章分享给你的朋友,关注我,一起做数据。..