首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
14,232 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,468 阅读
3
gradle-5.4.1-all.zip下载
9,509 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
8,203 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
7,018 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
617
篇文章
累计收到
629
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
452
篇与
的结果
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,346 阅读
0 评论
0 点赞
2020-08-17
jQuery 完整 ajax示例
$(function(){ //请求参数 var list = {}; // $.ajax({ //请求方式 type : "POST", //请求的媒体类型 contentType: "application/json;charset=UTF-8", //请求地址 url : "http://127.0.0.1/admin/list/", //数据,json字符串 data : JSON.stringify(list), //请求成功 success : function(result) { console.log(result); }, //请求失败,包含具体的错误信息 error : function(e){ console.log(e.status); console.log(e.responseText); } }); });
2020年08月17日
834 阅读
0 评论
0 点赞
2020-08-16
宝塔安装的redis开启远程连接,redis远程连接
第一步,打开配置文件/www/server/redis/redis.conf搜索bind,然后将这一行注释搜索protected-mode,将yes改成no,然后端口自己根据需求改。然后搜索requirepass,解除注释,进行设置密码保存文件,重启宝塔安全:放行你自己设置的端口然后如果服务器商那边安全组需要放行,也需要去响应的控制面板放行端口
2020年08月16日
2,499 阅读
0 评论
0 点赞
2020-08-16
HTML打印准考证用JS在html页面实现打印功能
用JS在html页面实现打印功能做项目时,有在网页实现全局和局部打印的需求,百度许久,现总结如下:打印方式一:1.首先在head里面加入下面一段js代码:<script language="javascript"> function preview(fang) { if (fang < 10){ bdhtml=window.document.body.innerHTML;//获取当前页的html代码 sprnstr="<!--startprint"+fang+"-->";//设置打印开始区域 eprnstr="<!--endprint"+fang+"-->";//设置打印结束区域 prnhtml=bdhtml.substring(bdhtml.indexOf(sprnstr)+18); //从开始代码向后取html prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));//从结束代码向前取html window.document.body.innerHTML=prnhtml; window.print(); window.document.body.innerHTML=bdhtml; } else { window.print(); } } </script>2.然后在所需要打印的代码,用和包围着,如下:<!--startprint1--> <!--打印内容开始--> <div id=wdf> ... </div> <!--打印内容结束--> <!--endprint1-->3.最后加上一个打印的按钮<input type='button' name='button_export' title='打印1' onclick=preview(1) value='打印1'>打印方式二:1.javascript中方法为:<javascript> function dayin(){ var userAgent = navigator.userAgent.toLowerCase(); //取得浏览器的userAgent字符串 if (userAgent.indexOf("trident") > -1){ alert("请使用google或者360浏览器打印"); return false; }else if(userAgent.indexOf('msie')>-1){ var onlyChoseAlert = simpleAlert({ "content":"请使用Google或者360浏览器打印", "buttons":{ "确定":function () { onlyChoseAlert.close(); } } }) alert("请使用google或者360浏览器打印"); return false; }else{//其它浏览器使用lodop var oldstr = document.body.innerHTML; var headstr = "<html><head><title></title></head><body>"; var footstr = "</body>"; //执行隐藏打印区域不需要打印的内容 document.getElementById("otherpho").style.display="none"; //此处id换为你自己的id var printData = document.getElementById("printdivaa").innerHTML; //获得 div 里的所有 html 数据 document.body.innerHTML = headstr+printData+footstr; window.print(); //打印结束后,放开隐藏内容 document.getElementById("otherpho").style.display="block"; document.body.innerHTML = oldstr ; } } </javascript>2.页面内容如下: ... <!--打印内容开始--> <div id='printdivaa'> ... </div> <!--打印内容结束--> ...3.页面中放置一个打印按钮:<button type="button" class="btn_search" onclick="dayin()">打印</button>打印方式三(此方式会重新打开一个浏览器窗口):1.javascript中方法为: //打印操作 function print() { var userAgent = navigator.userAgent.toLowerCase(); //取得浏览器的userAgent字符串 if (userAgent.indexOf("trident") > -1) { alert("请使用google或者360浏览器打印"); return false; } else if (userAgent.indexOf('msie') > -1) { var onlyChoseAlert = simpleAlert({ "content" : "请使用Google或者360浏览器打印", "buttons" : { "确定" : function() { onlyChoseAlert.close(); } } }) alert("请使用google或者360浏览器打印"); return false; } else {//其它浏览器使用lodop var oldstr = document.body.innerHTML; var headstr = "<html><head><title></title></head><body>"; var footstr = "</body></html>"; //执行隐藏打印区域不需要打印的内容 document.getElementById("otherpho").style.display="none"; var printData = document.getElementById("studentPhoTable").innerHTML; //获得 div 里的所有 html 数据 var wind = window.open("", "newwin", "toolbar=no,scrollbars=yes,menubar=no"); wind.document.body.innerHTML = headstr + printData + footstr; wind.print(); //打印结束后,放开隐藏内容 document.getElementById("otherpho").style.display="block"; wind.close(); window.document.body.innerHTML = oldstr; } } </script>2.页面内容如下: ... <!--打印内容开始--> <div id='studentPhoTable'> ... </div> <!--打印内容结束--> ...3.页面中放置一个打印按钮:<input type="button" onclick="print()" value="确定打印" />
2020年08月16日
1,510 阅读
0 评论
1 点赞
2020-08-12
C# winform 插入数据到MySQL时中文全部变成了问号
今天做作业的时候试了一下新买的数据库发现插入数据中文的时候数据到数据库就变成了问号,一开始猜想应该是字符编码的问题于是我在代码里面转成了UTF-8后来发现还是?号,于是在百度找到了答案,需要在连接时加上Charset=utf8;
2020年08月12日
932 阅读
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日
976 阅读
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日
884 阅读
0 评论
1 点赞
1
...
31
32
33
...
65