分类目录:《Python爬虫从入门到精通》总目录
Ajax数据爬取(一):基本原理
Ajax数据爬取(二):分析方法
Ajax数据爬取(三):结果提取
这里还以《Python爬虫从入门到精通——Ajax数据爬取(一):基本原理》中的微博为例,接下来用Python来模拟这些Ajax请求,把马云微博内容爬取下来。
分析请求
打开Ajax的XHR过滤器,然后一直滑动页面以加载新的微博内容。可以看到,会不断有Ajax请求发出。
选定其中一个请求,分析它的参数信息。点击该请求,进入详情页面。
可以发现,这是一个GET类型的请求,且请求的参数有4个:type
、value
、containerid
和page
。
随后再看看其他请求,可以发现,它们的type
、value
和containerid
始终如一。type
始终为uid
,value
的值就是页面链接中的数字,其实这就是用户的id
。另外,还有containerid
。可以发现,它就是107603加上用户id。改变的值就是page
,很明显这个参数是用来控制分页的,page=1
代表第一页,page=2
代表第二页,以此类推。
分析响应
随后,观察这个请求的响应内容。
这个内容是JSON格式的,浏览器开发者工具自动做了解析以方便我们查看。可以看到,最关键的两部分信息就是cardlistInfo
和cards
:前者包含一个比较重要的信息total
,观察后可以发现,它其实是微博的总数量,我们可以根据这个数字来估算分页数;后者则是一个列表,它包含10个元素,我们可以展开其中一个看一下。
可以发现,这个元素有一个比较重要的字段mblog
。展开它,可以发现它包含的正是微博的一些信息,比如attitudes_count
(赞数目)、comments_count
(评论数目)、reposts_count
(转发数目)、created_at
(发布时间)、text
(微博正文)等,而且它们都是一些格式化的内容。这样我们请求一个接口,就可以得到10条微博,而且请求时只需要改变page
参数即可。这样的话,我们只需要简单做一个循环,就可以获取所有微博了,具体过程可以参考文章《爬虫实战:爬取新浪微博内容》。