首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,548 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,096 阅读
3
gradle-5.4.1-all.zip下载
9,059 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
7,928 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,908 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
626
篇文章
累计收到
624
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
142
篇与
的结果
2020-08-18
axaj异步加载数据爬虫,获取B站UP主所有视频信息保存到数据库——每周一个爬虫小教程系列
这次要爬取的网页是B站里面的UP主的投稿视频页面,这次以教父的的账号来做个示范。网址:https://space.bilibili.com/482165792/video这篇文章的标题是ajax异步加载的数据爬取,这与平时的有什么区别呢?通常的爬虫是将网页源码下载下来,然后利用xpath或者其他一些方式,将有用的数据提取出来,但是如果下载之后没有看到任何数据呢?就像这样子:这个时候就说明这个网站可能是ajax异步加载的数据了,而不是后端直接渲染出来的。就个人而言,是比较喜欢ajax的,因为这样的话就可以直接找到数据的接口了,提取数据直接用json当字典就可以解析出来了。回到浏览器,在视频页面F12,进入Network,选择XHR(XMLHttpRequest),这时候我们点击第二页。这时候我们就可以看到增加了几条东西。一条一条点开看下,只要看Preview就可以了,因为如果是ajax渲染的话,请求返回来的肯定会有视频数据。第一个就是了。将data展开。可以看见有两个list,tlist和vlist,大概意思应该是投稿类型的列表和视频列表了吧于是我们再展开vlist看看,这里面不仅有标题,还有描述,av号和bv号以及播放量和视频长度这两条数据对应的也就是教父的第一个和第二个视频这样子教父的接口就找到了,然后打开Python开始写代码。在这里可以看到这次请求的URL和请求方式等,我们将其全部转移到Python之中。我们分析一下这个URL加了哪些参数mid:482165792 #这个对比可以发现是教父的ID,也就是说只要修改这个值就可以获取其他UP的视频信息了ps:30 #根据实验,发现这个就是每页获取多少条视频数据了tid:0 #好像不知道pn:1 #page number?就是翻也吧keyword: #关键词?order:pubdate #排序方式,发布时间jsonp:jsonp #返回json格式不得不说,B站对于爬虫新手还是很友好的,没加任何反爬机制,直接请求就可以获取到数据然后加个循环,获取一下所有页数的视频。然后为了更清晰的展示,我们将数据清洗一下。# -*- coding: utf-8 -*- """ ------------------------------------------------- @ Author :Lan @ Blog :www.lanol.cn @ Date : 2020/8/18 @ Description:I'm in charge of my Code ------------------------------------------------- """ import requests for i in range(1, 12): url = f'https://api.bilibili.com/x/space/arc/search?mid=482165792&ps=30&tid=0&pn={i}&keyword=&order=pubdate&jsonp=jsonp' res = requests.get(url).json()['data']['list']['vlist'] for j in res: print('视频标题', j['title'], 'AV号', j['aid'], '播放量', j['play'], '视频时长', j['length'])然后我们建立一个表格,将其保存下来。# -*- coding: utf-8 -*- """ ------------------------------------------------- @ Author :Lan @ Blog :www.lanol.cn @ Date : 2020/8/18 @ Description:I'm in charge of my Code ------------------------------------------------- """ import requests with open('JiaoFuMvInfo.csv', 'a+', encoding='utf8') as f: f.write('视频标题,AV号,BV号,播放量,视频时长,视频简介,视频链接 ') for i in range(1, 12): url = f'https://api.bilibili.com/x/space/arc/search?mid=482165792&ps=30&tid=0&pn={i}&keyword=&order=pubdate&jsonp=jsonp' res = requests.get(url).json()['data']['list']['vlist'] for j in res: title = j['title'].replace(',', ',') avId = j['aid'] bvId = j['bvid'] play = j['play'] length = j['length'] des = j['description'].replace(',', ',').replace(' ', '') url = f'https://www.bilibili.com/video/{j["bvid"]}' f.write(f"{title},{avId},{bvId},{play},{length},{des},{url} ") print('视频标题', j['title'], 'AV号', j['aid'], '播放量', j['play'], '视频时长', j['length'])还可以结合我博客以前的教程,将这些数据做一些词云图等,还可以去获取一些喜欢的UP主的视频然后我顺便写了个获取所有B站用户的信息,为了和谐就只是单纯的循环了
2020年08月18日
2,215 阅读
0 评论
0 点赞
2020-08-11
LanAPI之Gitee图床
这段时间研究了一下下Gitlab和Gitee,本想着用Gitlab做一个图床的,结果调用API的时候死活都返回403我表示很无奈,所以只能用Gitee了,因为是Gitee所以,上传图片还请遵守国内相关的法律法规(小声bb:虽然应该也没几个人会用),严禁上传违法违规的图片。在线上传地址:https://api.565.ink/picbed/支持拖拽上传,多文件上传。咳咳页面虽丑,但咱只要功能到就行了啦、就是这么丝滑,在这段时间我会接入一个鉴黄吧。然后api的地址是:https://api.565.ink/files/请求方式:POST
2020年08月11日
892 阅读
0 评论
0 点赞
2020-08-10
LanAPI之学法普法学习题库
不知道你们最近有没有收到这个通知于是乎。。。我爱学习乎,生命不息,学习不止。为了大家能够更好的学法,普法,我将题目全部收集下来了(只有大学部分的哦)API地址:https://api.565.ink/getans/请求方式:GET请求参数:question举个栗子:https://api.565.ink/getans/?question=权利此API仅供大家学习使用,一切后果与本人无关,如此API侵犯到您的权益,请联系我进行删除,谢谢。vast@tom.com
2020年08月10日
773 阅读
0 评论
1 点赞
2020-08-07
OPQ机器人框架插件开发之Python模板
今天了解到还有个OPQ的框架似乎还不错,于是研究了一下,比酷Q还方便(因为我之前用的air版,图片都发不了)并且支持多平台,但是最新的版本居然阉割了Windows下的许多功能不过问题不大,满足我之前的需求了。于是参考了一下原本iot的python模板然后进行了修改,更加符合自己的用法习惯吧。然后就是代码:botConfig->configInfo.py(用于存放接口地址,以及机器人QQ)robotQQ = "{机器人QQ}" webapi = "{接口地址,后面无需加/}"botConfig ->botClass.py (用于存放一些对消息的解析类)import json import requests from .configInfo import * """ By : Lan Website : """ # 群组消息接受类 class GroupMess: def __init__(self, message): self.FromQQG = message['FromGroupId'] # 来源QQ群 self.QQGName = message['FromGroupName'] # 来源QQ群昵称 self.FromQQ = message['FromUserId'] # 来源QQ self.FromQQName = message['FromNickName'] # 来源QQ名称 self.Content = message['Content'] # 消息内容 self.MsgTime = message['MsgTime'] # 消息时间 # 私发消息接受类 class PrivateMess: def __init__(self, message): self.FromQQ = message['ToUin'] # 来源QQ号 self.ToQQ = message['FromUin'] # 目标QQ号 self.Content = message['Content'] # 消息内容 self.MsgType = message['MsgType'] # 消息类型 # 发送消息类 class SendMessage: def __init__(self, toUser=0, sendToType=0, sendMsgType='', groupId=0, content='', atUser=0, voiceUrl='', picUrl='', picBase64Buf='', voiceBase64Buf=''): self.data = { "toUser": toUser, # 欲发给的对象 群或QQ好友或私聊对象 "sendToType": sendToType, # 发送消息对象的类型 1好友 2群3私聊 "sendMsgType": sendMsgType, # 欲发送消息的类型 TextMsg、PicMsg、VoiceMsg "content": content, # 发送的文本内容 "groupid": groupId, # 发送私聊消息是 在此传入群ID 其他情况为0 "atUser": atUser, # At用户 传入用户的QQ号 其他情况为0 "picUrl": picUrl, # 发送图片的网络地址 "picBase64Buf": picBase64Buf, # 发本地送图片的buf 转 bas64 编码 "voiceUrl": voiceUrl, # 发送语音的网络地址 "voiceBase64Buf": voiceBase64Buf, # 发本地送语音的buf 转 bas64 编码 "fileMd5": "" } ''' 发送图片消息需要有:toUser sendToType sendMsgType picUrl ''' def send(self): print(self.data) requests.post(url=f'{webapi}/v1/LuaApiCaller?qq={robotQQ}&funcname=SendMsg&timeout=10', data=json.dumps(self.data)) return 200main.py (用于存放主文件)# coding=utf-8 import logging import time import socketio from botConfig.botClass import * from botConfig.configInfo import * sio = socketio.Client() """ By : Lan Website : https://gitlab.com/Vastsa/lanpicbed/-/raw/master/ """ def beat(): while True: sio.emit('GetWebConn', robotQQ) time.sleep(60) @sio.event def connect(): print('connected to server') sio.emit('GetWebConn', robotQQ) # 取得当前已经登录的QQ链接 beat() # 心跳包,保持对服务器的连接 @sio.on('OnGroupMsgs') def OnGroupMsgs(message): """ 监听群组消息""" data = GroupMess(message['CurrentPacket']['Data']) print(data) return @sio.on('OnFriendMsgs') def OnFriendMsgs(message): """ 监听好友消息 """ data = PrivateMess(message['CurrentPacket']['Data']) print(data) return @sio.on('OnEvents') def OnEvents(message): """ 监听相关事件""" print(message) def main(): try: sio.connect(webapi, transports=['websocket']) sio.wait() except BaseException as e: logging.info(e) print(e) if __name__ == '__main__': main()GitHub地址:https://github.com/vastsa/OPQBot-Pyhon
2020年08月07日
2,990 阅读
15 评论
0 点赞
2020-07-25
按数字批量重命名文件
今天在网上看到一个壁纸压缩包,是滴是滴,就是壁纸,文件是这样的本着互联网的分享精神,准备做一个随机图片,但是人家名字都不一样,咱也不好写代码,于是花了几分钟敲了几行代码,一秒钟就命名了530张图片。结果就是这样滴。咳咳,代码如下 def plRename(): sourcename = os.listdir('./') for index, value in enumerate(sourcename): try: os.rename(value, str(index) + '.' + value.split('.')[-1]) except EnvironmentError: print(EnvironmentError) print(f'{value}失败') input('完成!')
2020年07月25日
950 阅读
0 评论
0 点赞
2020-07-24
百度实时热点新闻采集
这个功能一直集成在我的机器人上面,获取的数据是这里的机器人是这样子的。这里我调用了短链接的接口,因为源数据都是来自于各种网站,点进链接即可进入新闻源网站。这里我是找到了百度的接口(手机端发现的,电脑端是直接渲染出来的)最后的python代码:async def get_redian(): response = requests.get('http://top.baidu.com/mobile_v2/buzz?b=1&c=515').json()['result']['descs'] result = '' index = 1 for i in response[:10]: if not i: continue data = i['content']['data'][0] url = requests.get( f'http://suo.im/api.htm?url={data["originlink"]}&key=5f02b5ca3a005a7b763779a2@892c179520d687fd305536bce67fb501').text result += f"【{index}】{data['title']} {url} " index += 1 return result自己根据需求改一下就行了
2020年07月24日
1,415 阅读
0 评论
0 点赞
2020-07-24
UTC时间格式转换为DateTime,Python
调用接口的时候传递了一个时间参数,大概就是长这样的:2020-07-22T02:26:37.329Z然后直接CV到百度啥都没有,然后去交流群里问了一下,得知为UTC时间。知道是UTC就好办了,import datetime utc = '2020-07-22T02:26:37.329Z' ForMat = '%Y-%m-%dT%H:%M:%S.%fZ' utcTime=datetime.datetime.strptime(utc,ForMat) localTime = utcTime + datetime.timedelta(hours=8) print(localTime)
2020年07月24日
1,261 阅读
0 评论
0 点赞
1
...
7
8
9
...
21