python获取单选框的值_Python功能太强大,我劝你最好别学 !

基于Requests和Ajax分析法的新浪微博内容及用户信息爬取

1 项目介绍

新浪微博:新浪微博是一个由新浪网推出,提供微型博客服务类的社交网站。

用户可以通过网页、WAP页面、手机客户端、手机短信、彩信发布消息或上传图片。新浪可以把微博理解为“微型博客”或者“一句话博客”。

用户可以将看到的、听到的、想到的事情写成一句话,或发一张图片,通过电脑或者手机随时随地分享给朋友,一起分享、讨论;还可以关注朋友,即时看到朋友们发布的信息。

本项目进行了新浪微博-个人主页的所有微博信息采集。以“新浪微博-个人主页的所有微博信息采集”为例。在实操过程中,可根据自身需求,更换新浪微博的其他内容进行数据采集。

2 页面分析

2.1 需求分析

爬取的网址: https://weibo.com/u/5305630013

20098b5d99198e2ee503297a015d6291.png

获取的博主信息:

微博博主名称,博主关注数量,博主粉丝数量,博主地址,博主个人简介,博主个人标签。

获取该博主的博客信息:

微博名称,微博发布时间,微博发布内容

2.2 找出微博用户的微博内容api

2.2.1 页面元素审查

一般做爬虫爬取网站时,首选的都是m站,其次是wap站,最后考虑PC站,因为PC站的各种验证最多。当然,这不是绝对的,有的时候PC站的信息最全,而你又恰好需要全部的信息,那么PC站是你的首选。一般m站都以m开头后接域名, 我们这次通过http://m.weibo.cn去分析微博的HTTP请求。

首先在PC打开微博主页:Python开发者微博主页

接着打开调试页面(F12,或右击检查),先选中右侧手机模式,然后刷新页面,这个时候就出来了m站微博主页:

https://m.weibo.com/p/id, 也有些是m站微博主页为:https://m.weibo.com/u/id;

注意:

1)当你打开一个页面,再点开network标签时是不会有信息的,我们需要在打开的情况下,刷新一下页面;

2)为了防止页面突然的跳转而丢失信息,一定要勾上preserved单选框。

2.2.2 XHR过滤获取API

选择XHR进行过滤,发现有两个已经发送的api请求。(api请求一般都在XHR中,其他网页请求在Doc)

f7cf7ca85d7c6dd0fd4040abe30aaa26.png

我们查看这两个api返回的数据发现,第一个api返回的是用户数据,第二个api返回的是微博内容数据。

根据测试发现真实的url可以删减一部分

用户数据:

https://m.weibo.cn/api/container/getIndex?type=uid&value=5305630013&containerid=1005055305630013

微博内容数据:

https://m.weibo.cn/api/container/getIndex?type=uid&value=5305630013&containerid=1076035305630013

参数value的值,我们通过采集多个情况进行分析得出,提门是用户的id号;

参数containerid的值,我们通过采集多个情况进行分析得出,它们获取用户内容的containerid为100505+oid,获取微博内容的containerid为107603+oid。

2.2.3 API返回的JSON数据分析

我们在右边选择Preview预览一下json,点击cards中任选一个card,其中的mblog标签下就有我们要的微博内容数据。我们继续观察发现这个json中只有10条数据;

3fdf1c2e8fbad5c7d3a0cb2f119dd293.png

那么我们往下滑动到下一页,继续查看请求的api。我们发现在获取下一页数据时的api加了一个值为2的参数page。继续往下翻页,page变成3、4、5…,由此我们推断这个api获取哪一页的数据由page决定。

615ccbeb11ec484a4ef9e43dcf7fa880.png

2.3 分析返回的json格式的微博内容

通过api我们获取到返回的微博内容数据,我们以其中一个card来分析获取到的数据,微博内容数据在mblog中。

当然可以在Chrome谷歌浏览器中安装一个json-viewer插件, 友好的显示json数据, 如下图所示:

13bb2e815189e8eb60f000bc8edeb89c.png

fef1f9fd04744c8bf83675959d010288.png

3 获取微博内容的代码实现

我们分析完接口之后就可以开始编写爬虫代码。

3.1 获取微博用户信息

08cc0fcb4b6079b4e357c10098250143.png

d32bde3d68ad58f37c2ac500577ef53a.png

执行效果

ae491a474879414553c98c729e0d40e1.png

3.2 获取微博内容

此处有个问题还没有解决?

Ajax下拉刷新数据, 获取第2页的信息, 默认的网址是通过since_id来处理的, 但是这个参数对应的值没有找到规律;

后来发现, 最早的page参数也可以生效, 因此就先用老方法解决了;

f2eb040ce7fb0ddec58abda44808f66b.png

93aa20e2ce5248ecde50ff3665256542.png

执行效果

7cb2dba53156427a2e9005a93fec5951.png

◆◆4 代码封装与重构◆◆

ab58ecc6db1e16268866306cb8510f3a.png

42e03a6bcbbfb3b7cd96e2a127b1ae2c.png

31da8e008d0bd47b4d046bba25257f8b.png

e9e9cdc910aa9112e18e109f2ee053ab.png

效果展示

159c64b592e650be22a838feb7e9b201.png

d45dc99f811d8381b98630ed236c5b43.png

拓展

  • 这个项目也可以使用urllib模块实现, 只是requests是基于urllib封装的模块, 使用更加友好.当然也可以使用Scrapy爬虫框架.

参考资料:

  • 通过获取api爬取新浪微博内容数据实战
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值