仙人刺也能看懂的Python爪巴虫教程

您所在的位置:网站首页 b站如何搜索用户id 仙人刺也能看懂的Python爪巴虫教程

仙人刺也能看懂的Python爪巴虫教程

2024-07-13 00:54| 来源: 网络整理| 查看: 265

相信不少小伙伴跟我一样,体会过写论文的时候找数据的苦恼。如果想要收集b站的数据,我又不是UP主,该怎么办呢?别急,一步步来看看!前言

前段时间实习成了做表工人,为了减少工作量用Excel+VBA实现了Excel自动抓取网页数据和可视化,打开了探索HTTP请求的新大门;现在“因为兴趣”自学python,尝试解决一些常见的需求:

初次投稿,来试试我爬我自己是什么感觉吧!

一、从分析请求开始

先理一理大致的思路。首先b站是个网站!

然后我们看到的网站大致可以看成是HTML+CSS+JavaScript组成的一坨!

接着这坨东西会不停地和服务器说话,服务器会非常耐心地逐句回复他 404

看到这里的小伙伴应该领悟了,我们要偷听他和服务器说话!

没错!但是我们要光明正大的听————

(一)F12审查元素

如果说爪巴虫是在盗墓,那它就是洛阳铲:

在咱们要偷听的页面按下F12,打开审查元素界面

映入眼帘的是一片看起来非常复杂的HTML,暂时不用管它;

先介绍一下这一排东西都是干啥的(非专业介绍):

第一个光标,点了之后可以在网页选择区域查看对应的HTML;

第二个手机似的,用于模拟手机环境;

Elements:当前页面的代码,在这里头可以调试各种样式和事件;

Console:交互式控制台,可以看一些调试输出信息,比如设断点之后;

Sources:我理解的是当前页面调用的JS,在这里可以设置断点、添加调试语句、逐语句执行,这样就可以看到代码具体的执行步骤啦;

Network:爪巴虫的干活,这里的大大的妙。这里可以看到监听后的各种链接,基本上和服务器所有的“聊天记录”都在这了;

Application:这里存有sessionStorge、localStorge、以及最耀眼的仔——Cookie。

(二)HTTP请求

我们的主要目标就是network,先听听他们聊了啥:

点到network,勾上preserve log(这样如果跳转不会丢失记录),然后试着刷新一下:

出现了好多“聊天记录”,随便打开一个康康:

绿灯(200),意思就是这条请求成功了!

请求大致上有两种,GET和POST请求:

GET请求的参数都会写在url的后面,也就是xxx.com/xxx?参数=xxx的形式,&是和的意思,所以这条url携带了两个参数,vmid和jsonp,vmid就是我的b站uid啦~

POST请求一般参数是以form的形式发送的,相对安全些。

然后来看看这条请求得到了什么回复:

看起来复杂实际上非常好懂!这就是大名鼎鼎的Json格式,爪巴虫的好伙伴~

用preview来看会清晰的多:

嗯,大致就是和服务器问:

这个卑微的UP主有多少粉丝、关注和私信呢?

服务器:足足8个粉丝呢

......

我知道啦!!!在开始努力啦(小声)

咳咳,言归正传,大概可以猜到,弹幕、评论之类的东西,都是以这种请求-响应的形式拿到的。再看看弹幕是怎么弄到的(此处省略一万字描述爪巴虫的辛苦):

这就是咱们要的弹幕了!虽然他不是Json是XML,但是万变不离其宗嘛——

那么问题来了,我们又不是这坨东西,怎么发请求呢?请求要怎么模拟呢?

二、python是世界上最好的语言

PHP是世界上最好的语言 python是世界上最好的语言!(x)

python的热门是有原因的,它简单呀!

(一)Hello Requests

安装Visual Studio - Python模块 - 开始编程!

基础语法啥的咱直接跳过,稍微有点编程基础的看这里:

python有很多很多库,就像U盘一样即插即用,按需引入,我们要发送请求的话需要引用requests库;

作为萌新,咱们面向过程就行,直接接着写:

两行代码,这个请求就建好了!现在只需要点击运行……什么都没发生?

因为链接是建立了,但是只是运行的话看不到过程和结果,因此再多加一个输出内容到屏幕:

再次运行,结果是:

返回的是Json格式,不是我们想要的东西,但是可以很明显地看出是因为没有登录所以被婉拒了。

这可咋办呢?怎么才能给b站证明我登录了?

还记得我前面提到过有一个最耀眼的仔吗?它就是————

抱歉放错了!是这位:

Cookie,可以说是网站给你戴的小徽章,每次服务器一看见你就会看看你的小徽章,确认你是自己人;不过这小徽章是饼干做的,保质期一到,就会:

而要和B站证明咱们是自己人,就要带上咱们的小徽章;每个人的小徽章都不一样,而且要注意不要让小徽章被别人看到哦~ 妈妈它只认小徽章不认人

Cookie有很多个,这里我挨个试验之后发现登录态的验证只需要用到SESSDATA这一条就行;有兴趣的小伙伴可以观察一下登录请求,可以发现登录的时候附加的cookie是SESSDATA(登录态)、bili_jct(csrf鉴权)

那么我们只需要在python里发请求的时候带上这个Cookie(SESSDATA)就好了!

结果是:

XML是成功弄到了,但是是乱码的,改一下编码:

成功!接下来只需要接收XML并处理就好啦。先分析一下XML里数据的格式:

每一条弹幕都被保存在d标签中,d标签具有属性p,属性p由逗号分隔后共有8个值,分别是:

弹幕出现时间(视频中)、弹幕模式、弹幕大小、弹幕颜色、弹幕评论时间、弹幕池、用户ID、弹幕ID。

(二)在?康康你的收藏夹

每一条弹幕都带有用户ID(B站UID),那么通过UID都可以看到哪些数据呢?在个人中心刷新一下试试:

这些全部都是和个人信息相关的链接!

随便选一个,是查看收藏夹的,其他的以此类推;

整理了一下,有用的是这些:

https://api.bilibili.com/x/relation/followers 粉丝列表

https://api.bilibili.com/x/relation/followings 关注列表

https://api.bilibili.com/x/space/acc/info 用户信息,包含生日、等级、姓名、性别、硬币数、签名等

https://api.bilibili.com/x/relation/stat 用户信息②,包含关注、粉丝数等

https://api.bilibili.com/x/space/upstat UP主信息,包含视频播放量、文章阅读量、获赞数等

https://api.bilibili.com/x/space/tag/sub/list 用户订阅标签

写个类,简单封装一下几个方法,最后长这样:

看看结果:

奶酥!剩下只用把数据导入到csv/excel里啦~

如果有小伙伴觉得不过瘾,可以到我的CSDN博客上看更详细的代码:

https://blog.csdn.net/weixin_47190827/article/details/113177411

求点赞!求关注!求收藏!力求做一个超级高产的UP主!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3