按关键词阅读:
0. 前言 最近有同学问我有没有试过用scrapy爬东西 , 说想爬一条微博下面的评论 , 恰好几年前用scrapy爬过电影票房做作业 , 于是心血来潮 , 再次使用scrapy进行了这次微博评论的爬取 , 弥补了一下当年想爬微博但是没有进行的遗憾 , (看到是动态加载 , 难度太高 , 知难而退)
这次选择scrapy的理由是当时被问就是有没有用过scrapy , 其次是因为几年前用过 , 觉得编码量小、也不难 , 不太需要懂底层实现原理 , 十分适合初学python或者爬虫的同学来使用
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
python免费学习资料以及群交流解答后台私信小编01即可!
1. 前期准备1.1 安装python 安装python就没什么技术含量了 , 网上有很多教程 , 我在装这些东西的时候也是跟着教程做的避免出错 , 所以没什么好班门弄斧的了 , 要特别注意的是要配置环境变量 , 如果没有正确配置环境变量 , 有些命令可能要切换到相应文件夹下面才能使用
在系统变量-环境变量-Path中加入你的Python安装路径的Scripts路径
文章插图
我的是C:\Python27\和C:\Python27\Scripts
1.2 安装scrapy 这一步在安装的时候没有详细记录 , 引用文章
有报错的话跟着报错解决就行了
1.3 创建scrapy项目 在安装好scrapy之后 , 在控制台输入
scrapy startproject 项目名 我是在pycharm下面的控制台输入
文章插图
创建了一个名为weiboCrawl的Project , 然后在pycharm中打开就行了
2. 对象选择 本来选择的对象是weibo.cn
文章插图
因为这个站点的爬虫肯定是最好做的 , 不涉及复杂的加载 , 只有简单的翻页 , 递归的请求就好了 , 但是不知为何 , 在第50页之后的评论显示不出来
文章插图
然后在思考的过程中点到了手机微博触屏版m.weibo.cn的链接 , 他是这个样子的
文章插图
按下 F12 debug, 在没有往下拖动的时候
文章插图
这里加载的东西有点多 , 但是无所谓 , 先拖到最下面 , 然后将页面往下拖动加载评论 , 观察新加载的请求
往下拖动加载评论
文章插图
可以看到 , 红框是我们上一个截图的最后一个请求 , 黄色框就是我们向下拖动加载评论的时候新发出的请求 , 那么新加载的评论肯定也是返回在这些请求当中的
评论我想百分之99都不会返回在jpeg里面的吧 , 那肯定就是在最上面那两个请求获得了新加载的评论了 , 如果实在不行、返回的格式都是你不认识的格式 , 那一个一个点开来看看也是可以的
文章插图
可以看到 , 新加载的评论确实在这个请求中返回
再往下拉多几次之后发现都是一样的 , 那么我们就可以通过这个移动版微博的这个请求来爬取我们想要的评论 , 接下来要做的只是找到他们之中的规律请求就好了
3. 对象分析3.1 请求分析 第一个请求;mid=4466768535861595 --tt-darkmode-color: #999999;"> 第二个请求;mid=4466768535861595 --tt-darkmode-color: #999999;"> 第三个请求;mid=4466768535861595 --tt-darkmode-color: #999999;"> 后续请求类似
请求中 , 有id、mid、max_id、max_id_type四个参数 , 其中id和mid通过观察发现在每个请求中都是一样的 , 因此无须分析 , 重点看另外两个
其中 , max_id_type只有第一次为0 , 后面都为1 , 不难知道 , max_id_type为0的时候表示不传max_id , 为1时表示传max_id
也就是说我们第一次请求设置为0 , 后面这个参数都设置为1就好了
观察第一个请求的返回包
文章插图
返回的max_id=4570005682782617
再看第二个请求中传递的参数max_id恰好就是第一个返回包中返回的max_id的值
后面的请求也是如此 , 下一个请求传递的max_id的值是上一个返回包中的max_id的值
得出结论:
1.发起请求 , 存储返回的max_id的值 ,
稿源:(未知)
【傻大方】网址:http://www.shadafang.com/c/111J2N062020.html
标题:从安装软件开始教你爬取微博上万条评论数据!这都还学不会吗?