Python爬虫从入门到精通——Ajax数据爬取(三):结果提取

分类目录:《Python爬虫从入门到精通》总目录

Ajax数据爬取(一):基本原理
Ajax数据爬取(二):分析方法
Ajax数据爬取(三):结果提取

这里还以《Python爬虫从入门到精通——Ajax数据爬取(一):基本原理》中的微博为例,接下来用Python来模拟这些Ajax请求,把马云微博内容爬取下来。

分析请求

打开Ajax的XHR过滤器,然后一直滑动页面以加载新的微博内容。可以看到,会不断有Ajax请求发出。

选定其中一个请求,分析它的参数信息。点击该请求,进入详情页面。
Python爬虫从入门到精通——Ajax数据爬取(三):结果提取_第1张图片
可以发现,这是一个GET类型的请求,且请求的参数有4个:typevaluecontaineridpage

随后再看看其他请求,可以发现,它们的typevaluecontainerid始终如一。type始终为uidvalue的值就是页面链接中的数字,其实这就是用户的id。另外,还有containerid。可以发现,它就是107603加上用户id。改变的值就是page,很明显这个参数是用来控制分页的,page=1代表第一页,page=2代表第二页,以此类推。

分析响应

随后,观察这个请求的响应内容。
Python爬虫从入门到精通——Ajax数据爬取(三):结果提取_第2张图片
这个内容是JSON格式的,浏览器开发者工具自动做了解析以方便我们查看。可以看到,最关键的两部分信息就是cardlistInfocards:前者包含一个比较重要的信息total,观察后可以发现,它其实是微博的总数量,我们可以根据这个数字来估算分页数;后者则是一个列表,它包含10个元素,我们可以展开其中一个看一下。
Python爬虫从入门到精通——Ajax数据爬取(三):结果提取_第3张图片
可以发现,这个元素有一个比较重要的字段mblog。展开它,可以发现它包含的正是微博的一些信息,比如attitudes_count(赞数目)、comments_count(评论数目)、reposts_count(转发数目)、created_at(发布时间)、text(微博正文)等,而且它们都是一些格式化的内容。这样我们请求一个接口,就可以得到10条微博,而且请求时只需要改变page参数即可。这样的话,我们只需要简单做一个循环,就可以获取所有微博了,具体过程可以参考文章《爬虫实战:爬取新浪微博内容》。

你可能感兴趣的:(Python爬虫从入门到精通)