热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

咋办呢?

吭呲吭呲从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,它的好处就不介绍了,反正就是省事。

直接上代码吧!

"""
爬取微博评论,保存到数据库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就好
"""from pymongo import MongoClient
import requests
import time__author__ = 'liuzhijun'headers = {"Host": "m.weibo.cn","User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) ""Version/9.0 Mobile/13B143 Safari/601.1","COOKIE": "xxxxx" # 这里将浏览器的COOKIE复制过来进行了。
}client = MongoClient('mongodb://localhost:27017/')
db = client['weibo']def main(mid, max_id):""":param mid: 某条微博id:param max_id: 分页参数:return:"""url = "https://m.weibo.cn/comments/hotflow?max_id_type=0"params = {"mid": mid}if max_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')for item in data:db['comment'].insert_one(item)if max_id:time.sleep(1)main(mid, max_id)if __name__ == '__main__':main("4477013081328252", None)

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

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

第4步:关注公众号

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

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

如果你在爬数据过程中遇到任何问题可以微信加我 "yueryounali"

推荐阅读:

爬虫大佬崔庆才,手把手教你写爬虫

关注公众号,学习Python

有帮助再打赏↓↓↓


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
author-avatar
mobiledu2502869373
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有