首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,549 阅读
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英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
450
篇与
的结果
2020-06-20
Python的基本骚操作(长期更新)
最近在网上看到一些Python的一些基本但是非常实用的操作。元素相关多赋值:a = b = c = 'www.lanol.cn' print('a的值:'+a) print('b的值:'+b) print('c的值:'+c)交换元素的值:a = "我是a的值" b = "我是b的值" a,b = b,a print('a:'+a) print('b:'+b)元素自操作:a = 5 a +=1 #自加1 a -=1 #自减1 a /=2 #自除2 a *=2 #自乘2 a **=2 #自己的2次方 print(a)使用三元操作符赋值:三元操作符是 if-else 语句也就是条件操作符的一个快捷方式:[表达式为真的返回值] if [表达式] else [表达式为假的返回值]这里给出几个你可以用来使代码紧凑简洁的例子。下面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。x = 10 if (y == 9) else 20同样地,我们可以对类做这种操作:x = (classA if y == 1 else classB)(param1, param2)在上面的例子里 classA 与 classB 是两个类,其中一个类的构造函数会被调用.下面是另一个多个条件表达式链接起来用以计算最小值的例子:In [10]: def small(a,b,c): ...: return a if a<=b and a<=c else ( b if b<=a and b<=c else c) ...: In [11]: small(1,0,1) Out[11]: 0 In [12]: small(1,2,3) Out[12]: 1我们甚至可以在列表推导中使用三元运算符: In [14]: [ m**2 if m > 10 else m**4 for m in range(20) ] Out[14]: [0,1,16,81,256,625,1296,2401,4096,6561,10000,121,144,169,196,225,256,289,324,61]列表相关判断列表是否为空:def test1(): arr1 = [1, 2, 3, 4, 5] arr2 = [] # 不推荐 if len(arr1)!=0: print("arr1 is not empty-len!") if len(arr2)!=0: print("arr2 is not empty-len!") # 推荐 if arr1: print("arr1 is not empty!") if arr2: print("arr2 is not empty!")遍历列表,获取索引下标:def test3(): l1 = [11, 22, 30, 41, 51] # 不推荐 for i in xrange(0, 5): print("%s->%s" %(i, l1[i])) # 推荐 for i, v in enumerate(l1): print("%s->%s" % (i, v))字典列表生成式:def test5(): dict1 = {1: "val1", 2: "val2", 3: "val3", 5: "val5"} dict2 = {k*2: v for k, v in dict1.items()} print(dict2)其他相关
2020年06月20日
1,369 阅读
0 评论
0 点赞
2020-06-19
易班易瞄瞄指定话题用户动态自动爬取并保存
因为最近有需要统计易瞄瞄指定话题下的用户发表的动态内容,还需要统计点赞数,发表时间等信息,因此随手写了一个小脚本,这个呢就不写教程了,直接放代码和效果图,需要自己手动获取易班的login_token,抓客户端包即可,或者浏览器F12,以前也写过易班登录JS。修改topicid既可切换话题import re import time import requests print('正在获取秘钥!') info = input("请输入Token") url = f'https://ymm.yiban.cn/news/list/news?loginToken={info}&page=1&size=100&topicId=2' res = requests.get(url=url).json() if res['message'] == "操作成功" and info['version'] == "暂无": data = res['data']['list'] print('正在下载数据!') with open('易喵喵点赞数量.csv', 'w', encoding='utf8') as f: f.write('用户id,学号,用户名,文字内容,11点,赞数,发布时间 ') print("正在写入数据!") for i in data: title = i['title'].replace(' ', '').replace(',', ',') likenum = i['likeNum'] time_local = time.localtime(int(i['createTime'])) date = time.strftime("%Y-%m-%d %H:%M:%S", time_local) riqi = time.strftime('%H', time_local) if int(riqi) > 11: riqi = "11点前" else: riqi = "11点后" xuehao = re.findall('([2][0][1][1-9]d*)', title) if xuehao: xuehao = xuehao[0] userid = i['origin']['User_id'] usernick = i['origin']['usernick'].replace(',', ',') f.write(f'{userid},{xuehao},{usernick},{title},{riqi},{likenum},{date} ') print(f'{userid},{xuehao},{usernick},{title},{riqi},{likenum},{date}') print("作者:Lan,www.lanol.cn") input("结果已生成在软件目录下") else: input("获取失败,请联系Lan")
2020年06月19日
2,662 阅读
0 评论
0 点赞
2020-06-18
Vue.JS基础以及本地指令:v-text,v-html,v-on,v-show
为了不让这位爷的青春终结,我来日更了。感谢各位的支持。这几天学了点Django,感觉js也得接触下了,于是看到学习站上有一套黑马程序员的4小时快速入门Vue.js的教程,发现Vue.Js似乎挺容易的。Vue.Js官方文档:https://cn.vuejs.org/v2/guide/第一个指令:v-text:设置标签的文本值(textContent)首先如果要在网页中使用Vue.Js的话就得先引用Vue(在官方文档有两句,第一句适合开发环境,会有相应提示,第二句更加的快,适合生成环境)<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><!-- 生产环境版本,优化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>到这里代码就分为两部分了,一部分写在html中,一部分写在JS中(大概就是用过JS渲染HTML内容了)。打开了尘封已久的VS Code,并写入了对于Vue的HelloWorld首先来解释一下这两句话(凭个人感觉理解):首先是html里面的这句,新建一个div,ID为Lan,为了方便JS操作的时候找得到这个 <!-- www.lanol.cn --> <div id="Lan"> {{ message }} </div>这里应该是新建一个app,vue型的,el是选择中我们之前创建的div,data就是数据,message就是我们要展现的text var app = new Vue({ el: '#Lan', data: { message: 'Hello Vue!' } })首先呢,这个message有两种写法,第一种就是我们刚刚写的Hello Vue这种,用{{}}包围起来,这种写法不会清除原有的内容, <!-- www.lanol.cn --> <div id="Lan"> {{ message }} </div>而另一种写法就是写在标签的属性区,这样写也是可以的。 <!-- www.lanol.cn --> <div id="Lan" v-text='message'> </div>然后我们来对比一下两者的区别。 <!-- www.lanol.cn --> <div id="Lan"> <h2>{{message}}www.lanol.cn</h2> <h2 v-text='message'>www.lanol.cn</h2> </div>由图可以看见,放在{{}}内的www.lanol.cn显示出来了而放在属性区的则看不见了,这就是两者区别了。在这里面你还可以进行字符串的拼接等操作,如果是{{}}直接加就可以了,而属性区则需要一个+号和引号(因为我包含message用的是单引号,所以里面只能用双引号了如果Python一样) <div id="Lan"> <h2>{{message}}www.lanol.cn</h2> <h2 v-text='message'>www.lanol.cn</h2> <h2 v-text='message+"www.lanol.cn"'></h2> </div>然后需要注意的是message内的内容可以是列表、字典等数据类型(用Python的话说)第二个指令:v-html:设置标签的innerhtml(说白了就是用JS写HTMl)这个指令呢就对比着上一个v-text来记录一下。<body> <!-- www.lanol.cn --> <div id="Lan"> <h2 v-text='message'></h2> <h2 v-html='message'></h2> </div> <script> var app = new Vue({ el: '#Lan', data: { message: '<h1>www.lanol.cn</h1>' } }) </script> </body>可以看见使用了v-text的被直接显示出来了,而v-html则被渲染了,就这?就这。第三个指令:v-on:为元素绑定事件(click,dblclick,monseenter)使用方法: <div id="Lan"> <input type="button" value="按钮" v-on:事件名="方法"> <input type="button" value="按钮" @事件名="方法"> </div>var app = new Vue({ el:"#Lan", methods:{ dolt:function(){ } } )}这里有两种写法,第一个是v-on:事件名="方法",第二个是比较简便的只需要@即可然后这里就只演示一下click的事件<body> <div id="Lan"> <input type="button" value="点击按钮" v-on:click="dolt"> <input type="button" value="点击按钮" @click="dolt"> </div> <script> var app = new Vue({ el: '#Lan', methods: { dolt: function() { console.log("Lan点击了按钮") } } }) </script> </body>到此,三个基本指令已经写完了,发现掌握一个东西的最好办法就是将他自己用文字写一遍,就像我这样写一篇笔记,记录一下。最后这是一个点击就数字就增加或减少的DEMO,过大过小则提示<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>VueJS基本指令学习By:Lan</title> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="Lan"> <input type="button" value="加" @click="add"> <input type="button" value="减" @click="sub"> <h2>{{num}}</h2> </div> <script> var app = new Vue({ el: '#Lan', data: { num: 1 }, methods: { add: function() { if (this.num > 20) { alert('太大了') } else { this.num++; console.log(this.num) } }, sub: function() { if (this.num <= 0) { alert('太小了') } else { this.num--; console.log(this.num) } }, } }) </script> </body> </html>
2020年06月18日
1,197 阅读
0 评论
0 点赞
2020-06-17
抖音字体反爬,爬虫字体反爬策略——每周一个爬虫小教程系列
在B站上看到一个关于抖音字体反爬的视频,看完之后,精神抖擞,不禁感觉,我又行了,于是在模拟器上下载了一个抖音,打开了我尘封已久的抖音号。可以看见显示的数字是正常的,但是查看源码就是错误的。既然是字体反爬,那就得去找下字体,双击下载然后用在线字体编辑器打开看一下。我们看到这个数字1的Unicode是$E602,是不是和源代码中的差不多呢。在教程里面说到对于字体反爬,需要用模块将字体转为xml,相当于字典,然后就这样替换吧。将字体文件转换为xml文件需要用到的模块是fonttoole,这里需要自行安装一下。from fontTools.ttLib import TTFont font = TTFont('iconfont_9eb9a50.woff') font.saveXML('DouYinFont.xml')转换完成之后的XML文件。我们来搜索一下我们之前的数字1,他的Unicode就是E602,然后可以发现这里和之前在线字体网站上的结果是一样的然后我们来将XML文件提取出来,并输出一下(XML提取我目前也不会,所以是跟着教程写的,后期再去了解一下吧)a = font['cmap'].getBestCmap() print(a)这个时候发现似乎这些都变成了数字,而不是之前的$E602这样子的,是因为进制转换了,由原始的16进制,转成了10进制。然后我们需要将这个字典中的十进制数字转成这种16进制,然后还得把0x替换为&#x然后用代码实现就是酱紫的,大概就是提取出cmap这个节点的信息,然后遍历这个字典,然后重新转换成16进制然后变成字符串,在替换一下。a = font['cmap'].getBestCmap() b = {} for key, value in a.items(): b[str(hex(key)).replace('0x', '&#x')] = value print(b)然后就是用代码将num_这些转换为数字,参照这张字体在线编辑器的即可c = { 'num_': '1', 'num_1': '0', 'num_2': '3', 'num_3': '2', 'num_4': '4', 'num_5': '5', 'num_6': '6', 'num_7': '9', 'num_8': '7', 'num_9': '8', }然后改进一下之前的代码:for key, value in a.items(): b[str(hex(key)).replace('0x', '&#x')] = c[value] print(b)然后为了和网页源码里面一样()所以还需要做一些修改,在后面加一个分号和空格。for key, value in a.items(): b[str(hex(key)).replace('0x', '&#x')+'; '] = c[value] print(b)然后就是请求源码,然后替换了。headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36', } url = 'https://www.iesdouyin.com/share/user/91723415754' res = requests.get(url=url, headers=headers).text for key, value in b.items(): if key in res: res = res.replace(key, value+' ') print(res)
2020年06月17日
1,354 阅读
2 评论
0 点赞
2020-06-17
ORM常用数据字段类型及字段参数选项
这个摘自Django官方文档,只保留了教程所提到的以及个人感觉会用到的数据类型及参数选项。官方文档地址:https://docs.djangoproject.com/zh-hans/3.0/ref/models/fields/强大的谷歌翻译拯救了我,虽然有这份文档有中文选项但是似乎只有开头那么几句是中文首先是Field字段类型。AutoField类AutoField(** options)会IntegerField根据可用ID自动递增。您通常不需要直接使用它;如果没有另外指定,主键字段将自动添加到模型中。请参阅自动设置主键。这个就相当于我们自己设置的第一列自增的int型的ID吧。BigAutoField¶类BigAutoField(** options)一个64位整数,非常类似于,AutoField不同之处在于它保证可以匹配从1到的数字9223372036854775807。BigIntegerField¶类BigIntegerField(** options)¶一个64位整数,非常类似于,IntegerField不同之处在于它保证可以匹配从-9223372036854775808到的 数字9223372036854775807。此字段的默认表单小部件是 NumberInput。
2020年06月17日
825 阅读
0 评论
0 点赞
2020-06-15
ORM模型的使用,创建ORM模型,ORM模型映射到数据库,ORM模型增删改查
第一步、创建ORM模型。ORM模型通常放在app的models.py文件中,所以创建该文件,然后需要在settings.py中INSTALLED_APPS添加该app的名称。举个栗子。我的app名称为front,然后在这个目录下新增一个models.py文件在文件中添加自己需要的表以及列如,创建一个表book,列:ID,name,author,pricefrom django.db import models class Book(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=100, null=False) author = models.CharField(max_length=100, null=False) price = models.FloatField(null=False, default=0)在settings.py中INSTALLED_APPS添加该app的名称第二步、映射到数据库中。需要记住两行指令。python manage.py makemigrations #来生成迁移脚本文件。 python manage.py migrate #来将迁移脚本文件映射到数据库中注意:如果输入 Python manage.py makemigrations提示No changes detected,解决方案:输入这行指令即可:python manage.py makemigrations --empty yourappname第三步、增删改查。增:def index(request): # 添加数据 book = Book(name='www.lanol.cn', author='Lan', price=100) book.save() return HttpResponse('你好')查:通过主键:def index(request): # 查询数据 # 1,通过主键 book = Book.objects.get(pk=1) result = f'书本ID:{book.id} 书本名称:{book.name} 书本价格:{book.price}' return HttpResponse(result)查询所有数据:books = Book.objects.all()查找指定数据:调用objects的filter方法。单条件: books = Book.objects.filter(name=' 多条件: books = Book.objects.filter(name='www.lanol.cn',author='lan')删除数据:先get到再删除book = Book.objects.get(name='www.lanol.cn') book.delete()修改数据:先查找到,再修改,修改后保存。book = Book.objects.get(name='www.lanol.cn') book.name = 'lanol.cn' book.save()
2020年06月15日
1,071 阅读
0 评论
0 点赞
2020-06-15
Django连接MySQL缺少mysqlclient包,Python3.8安装mysqlclient
解决方案:下载whl文件,直接安装whl文件在https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient找到适合自己版本的mysqlclient比如我的是win32所以下载的下载到本地之后,最好放到项目文件夹内,在pycharm之中pip,因为这样就可以省略进入虚拟环境的步骤。然后成功安装
2020年06月15日
762 阅读
0 评论
0 点赞
1
...
39
40
41
...
65