吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3723|回复: 32
收起左侧

[Python 转载] 【bilibili】萌新的日常练手

  [复制链接]
Zeaf 发表于 2020-3-13 00:06
bilibili也太好了吧,代码有规律,对爬虫毫无阻拦....哔哩哔哩 - ( ゜- ゜)つロ 乾杯~
我发现去爬案例法条什么的都需要javascript...
改了一下刚学时的代码就完了(主要是bilibili网站更新了,原来的用不了),因此有点臃肿,但不想耗费太多时间
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 14 00:12:16 2019

@author: Zeaf
"""
import re,requests,codecs
import pandas as pd
import time

url_in=[]#创建空列表
keyword=input('请输入想要查找的关键词:')#个性化搜索
for i in range(1,10):#运用循环语句输出多个页码,这里可改为列表
    time.sleep(1)#停顿1s
    if i==1:
        kw={'keyword':keyword,'page':'1'}#keyword是输入的关键词,page是页码
        r=requests.get(url='https://search.bilibili.com/all?',params=kw)
        r.encoding='utf8'#防止乱码
        print(r.status_code)#200即正常
        #建立html源码文本
        x=codecs.open('缓存区.txt','w','utf8')
        x.write(r.text)
        x.close()
        #正则表达式提取(真的难搞)
        title=re.findall('<a title="(.*?)" href="//www.bilibili.com/',r.text)#标题
        playbacknumber=re.findall('<span title="观看" class="so-icon watch-num"><i class="icon-playtime"></i>\n        (.*?)\n      </span>',r.text)#播放量
        uploadtime=re.findall('<span title="上传时间" class="so-icon time"><i class="icon-date"></i>\n        (.*?)\n      </span>',r.text)#上传时间
        upname=re.findall('class="up-name">(.*?)</a>',r.text)#up主
        url=re.findall('<a title=".*?" href="(.*?)" target="_blank" class="title">',r.text)#视频链接
    else:
        kw={'keyword':keyword,'page':i}
        r=requests.get(url='https://search.bilibili.com/all?',params=kw)
        r.encoding='utf8'
        print(r.status_code)
        x=codecs.open('缓存区.txt','w','utf8')#若想保存所有源码文件可以插入'+str(i)+',为节省空间采用此方式
        x.write(r.text)
        x.close()
        title_=re.findall('<a title="(.*?)" href="//www.bilibili.com/',r.text)
        title+=title_#叠加
        playbacknumber_=re.findall('<span title="观看" class="so-icon watch-num"><i class="icon-playtime"></i>\n        (.*?)\n      </span>',r.text)
        playbacknumber+=playbacknumber_
        uploadtime_=re.findall('<span title="上传时间" class="so-icon time"><i class="icon-date"></i>\n        (.*?)\n      </span>',r.text)
        uploadtime+=uploadtime_
        upname_=re.findall('class="up-name">(.*?)</a>',r.text)
        upname+=upname_
        url_=re.findall('<a title=".*?" href="(.*?)" target="_blank" class="title">',r.text)
        url+=url_
#将链接补全
url_in=[]
for url_true in url:
    i= 'https:'+url_true
    url_in.append(i)
data={'标题':title,'播放量':playbacknumber,'上传时间':uploadtime,'UP主':upname, '视频地址': url_in}
y=pd.DataFrame(data)
#下面浮点化数据方便作图(注意播放量单位带有”万“)
for a,b in enumerate(y['播放量']):   
    if b[-1]=='万':
        y['播放量'][a]=float(y['播放量'][a][:-1])*10000
    else:
        y['播放量'][a]=float(y['播放量'][a])
#下面建立excel文件
y.to_excel('有关'+keyword+'的哔哩哔哩视频信息.xlsx',index=False)#制表
y.plot(y='播放量',kind='hist')#制作直方图,要浮点化才能作图哦
print('请在与本文件同级区域查看输出表格')
time.sleep(5)

生成的一张图(播放量)

生成的一张图(播放量)

关键词:罗翔

关键词:罗翔

免费评分

参与人数 4吾爱币 +10 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
东方学痞 + 1 热心回复!
Psyber + 1 谢谢@Thanks!
sihyk! + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

砸七砸八 发表于 2020-3-13 00:22
宁就是张三?

免费评分

参与人数 1吾爱币 +1 收起 理由
Zeaf + 1 不,楼下才是(&amp;#9685;ˇ&amp;#8704;ˇ&amp;#9685;)

查看全部评分

Psyber 发表于 2020-3-13 01:03
你爬搜索结果应该不会阻止,如果直接爬视频八成会有动作
hot2ice 发表于 2020-3-13 00:38
sen7203805 发表于 2020-3-13 00:20
沙发...............
nj2004 发表于 2020-3-13 00:36
好好学习学习
goblin0427 发表于 2020-3-13 00:42
好好学习天天向上
金不败地 发表于 2020-3-13 00:46
高级高级,不过b站是个不错的地方
红尘烟雨 发表于 2020-3-13 00:53
b站很有意思,里面的大佬也挺多的。
佩格瓦拉 发表于 2020-3-13 01:06
哔哩哔哩 - ( ゜- ゜)つロ 乾杯~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 02:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表