Rule34自动爬虫脚本
Rule34-Downloader
php爬虫,用于爬Rule34图站的数据,自动下载特定标签的图片
特性:
– 支持指定标签,多标签搜索
– 支持轮候任务
– 支持微信通知运行状态
– 低占用
安装向导:
1. 安装php环境
2. 把该程序拖至php.exe同目录中
3. 编辑php内的PATHS,该常量用于定义爬下来的数据的缓存路径
4. 保存
5. 打开ready.txt,按照格式填入待下载标签
6. 保存
7. 运行start.bat
标签格式
female:0:42
标签:开始的pid数(0开始的42的倍数):结束的pid数(0开始的42的倍数,需要比开始的pid大)
下载地址
https://gitee.com/7gugu/python-rule34Lib
有问题反馈
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
- 邮件(gz7gugu@qq.com)
- 博客(https://www.7gugu.com)
尬吹
其实这玩意儿我去年(2018)二月就写好了,不过那时候处于要备考的节点了,就没太多的精力去管理,现在有空了就来把爬虫修好发上来
2019 To do…
0X00 尬吹
写在2018-12-31的最后10min,对2019年的一些展望和计划。
写完看了看感觉还有点难度,但今年都能跨过那个坎了,考个证书还不行么,加油!
Be myself!!!
OwO
0X01 To do
- 考好第一个学期的期末考[√]
- 考好第二个学期的期末考[√]
- 去一次にほん[√]
- 买一个手办[√]
- 争取考过计二[√]
争取整一个四级(迁移到19大二上)- 用laravel写一个项目[√]
- 学python[√]
- 学redis[√]
- 考科一[√]
- 少吹逼多干活
2019-1-27第一次更新:完成第1,3,4点,删掉第6点
2019-3-14第二次更新:完成第7点(帮学校写了个下载站)
2019-6-1 第三次更新:完成5,8,9,10点
URP突破1700次安装咯!
0x00 尬吹
真的难以置信,在短短的四个月中URP的安装量又提高了1200次,这真的让人感到一种难以言表的开心。在发布两年以后,仍然具有如此活力,在我看来是很难得的。一方面是Unturned这个游戏进入到了3.0-4.0的过渡状态,导致游戏人数迅速降低,另一方面则是该面板只能用于管理Unturned服务器,这严重的限制了面向的用户群体。但是在这些情况下,URP还是能够脱颖而出,被大家选择来使用,实属荣幸。
而且这次的统计数据是2018年初时开始统计的,如果过算上17年的数据,我预估应该是已经有3000-4000的安装量了。虽然这个面板从技术上面具有许多的问题,如php和html的混淆,函数的复用率低下,耦合性高,无路由的概念,都限制住了面板的继续发展。即使这些在Umarket中已经得到了部分的解决与改善,但我坚信在以后的日子中我仍需继续努力去进行更多的开发,来继续提高自己的代码水平。
0x01 后记
再次感谢大家能够选择URP进行服务器管理维护,谢谢大家的支持,如果可以的话,欢迎大家能给我发点赞助,谢谢了owo
[油猴脚本]TypeSounder-模拟机械键盘声
描述:
一个基于油猴插件的模拟机械键盘的声音,就是按下键后,就会发出机械按键声
安装:
- 安装油猴插件,地址https://tampermonkey.net/
- 添加插件
- 运行插件
脚本代码:
[js]
// ==UserScript==
// @name TypeSounder
// @namespace https://103.249.111.182/
// @version 1.1
// @description 给按键加入机械键盘的触发声音
// @author 7gugu <gz7gugu@qq.com>
// @match https://tampermonkey.net/documentation.php?version=4.8.5847&ext=fire&updated=true
// @grant none
// @include *
// @require https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
// ==/UserScript==
(function() {
‘use strict’;
var id=1;
console.log("typesound已启动");
document.onkeydown=function(event){
id++;
$("body").append("<div id=’key_sound_"+id+"’><audio id=’player"+id+"’ src=’https://103.249.111.182/wp-content/uploads/2018/12/music.mp3′ preload=’auto’>您的浏览器不支持 audio 标签。</audio></div>");
var e = event || window.event;
var player = $("#player"+id)[0]; /*jquery对象转换成js对象*/
if(e && e.keyCode){
if (player.paused){ /*如果已经暂停*/ player.play(); /*播放*/ }
}
};
})();
[/js]
GreasyFork地址:
https://greasyfork.org/zh-CN/scripts/375939-typesounder
[油猴脚本]Typeshower-动态显示按下的按键
描述:
一个基于油猴插件的按键显示的插件,主要可以用于教学演示
安装:
- 安装油猴插件,地址https://tampermonkey.net/
- 添加插件
- 运行插件
效果展示:
Greasy Fork地址:
https://greasyfork.org/zh-CN/scripts/375905-typeshower
脚本代码:
// ==UserScript== // @name TypeShower // @namespace https://103.249.111.182/ // @version 1.0 // @description 动态显示输入 // @author 7gugu &lt;gz7gugu@qq.com&gt; // @match https://tampermonkey.net/documentation.php?version=4.8.5847&amp;ext=fire&amp;updated=true // @grant none // @include * // @require https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js // ==/UserScript== (function() { 'use strict'; var id=1; var key_array=new Array(200); key_array[65]='a'; key_array[66]='b'; key_array[67]='c'; key_array[68]='d'; key_array[69]='e'; key_array[70]='f'; key_array[71]='g'; key_array[72]='h'; key_array[73]='i'; key_array[74]='j'; key_array[75]='k'; key_array[76]='l'; key_array[77]='m'; key_array[78]='n'; key_array[79]='o'; key_array[80]='p'; key_array[81]='q'; key_array[82]='r'; key_array[83]='s'; key_array[84]='t'; key_array[85]='u'; key_array[86]='v'; key_array[87]='w'; key_array[88]='x'; key_array[89]='y'; key_array[90]='z'; key_array[112]='F1'; key_array[113]='F2'; key_array[114]='F3'; key_array[115]='F4'; key_array[116]='F5'; key_array[117]='F6'; key_array[118]='F7'; key_array[119]='F8'; key_array[120]='F9'; key_array[121]='F10'; key_array[122]='F11'; key_array[123]='F12'; key_array[136]='Num_Lock'; key_array[137]='Scorll_Lock'; key_array[8]='BackSpace'; key_array[9]='Tab'; key_array[32]='Space'; key_array[13]='Enter'; key_array[16]='Shift'; key_array[17]='Ctrl'; key_array[18]='Alt'; key_array[20]='Caps'; key_array[27]='Esc'; key_array[37]='←'; key_array[38]='↑'; key_array[39]='→'; key_array[40]='↓'; key_array[45]='Ins'; key_array[46]='Del'; key_array[48]='0'; key_array[49]='1'; key_array[50]='2'; key_array[51]='3'; key_array[52]='4'; key_array[53]='5'; key_array[54]='6'; key_array[55]='7'; key_array[56]='8'; key_array[57]='9'; key_array[192]='`'; key_array[173]='-'; key_array[61]='+'; key_array[219]='['; key_array[221]=']'; key_array[220]='\\'; key_array[59]=';'; key_array[222]='\''; key_array[188]=','; key_array[190]='.'; key_array[191]='/'; var key_shift=0; var key_ctrl=0; console.log("Typeshower已启用"); $("body").append(" &lt;img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cstyle%20type%3D'text%2Fcss'%3Etype%7Bpadding%3A%205px%2010px%3Bfont-size%3A%2087.5%25%3Bcolor%3A%20%23fff%3Bbackground-color%3A%20%23212529%3Bborder-radius%3A%205px%3Bfont-family%3ASFMono-Regular%2CMenlo%2CMonaco%2CConsolas%2C'Liberation%20Mono'%2C'Courier%20New'%2Cmonospace%3Bline-height%3A%201.5%3B%7D.key_list%7Bpadding%3A10px%3Bposition%3Afixed%3Bright%3A20px%3Btop%3A20px%3Bwidth%3A60px%3Bheight%3A50px%3Bz-index%3A999%3B%7D%3C%2Fstyle%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&amp;lt;style&amp;gt;" title="&amp;lt;style&amp;gt;" /&gt; "); $("body").append(" &lt;div class='key_list'&gt;&lt;/div&gt; "); document.onkeydown=function(event){ id++; console.log("Typeshower 监听中"); var key_template=""; var e = event || window.event ; if(e &amp;&amp; e.keyCode){ if(key_shift==1){key_template="Shift+";} if(key_ctrl==1){key_template="Ctrl+";} key_template=key_template+key_array[e.keyCode]; $("div.key_list").append("&lt;type id='"+id+"'&gt;"+key_template+"&lt;/type&gt; "); if(e.keyCode==16){key_shift=1;} if(e.keyCode==17){key_ctrl=1;} } $("type[id='"+id+"']").fadeOut(2500); $("br").fadeOut(2500); } document.onkeyup=function(event){ var e = event || window.event ; if(e &amp;&amp; e.keyCode){ if(e.keyCode==16){key_shift=0;} if(e.keyCode==17){key_ctrl=0;} } } })();
[笔记]VS2017 char *p=“”不可用的解决办法
起因:
今天在做c语言的功课时,发现旧的教材(基于vc++6.0)使用了如下的代码,对字符串指针进行赋值.
char *p="Hello World";
但是编写到VS2017上时报了下面的一个错误.
直接导致编译失败,经过了baidu的查找后,知晓了具体原因.
解决办法:
应把源代码修改成如下的代码.
//原代码 char *p="Hello world"; //修改后的代码 const char *p="Hello world";
主要原因是因为在新版本中增强了对字符串指针的安全性,通过使用静态声明,来防止越界
[笔记][Laravel]数据库操作
准备
新建App\Http\Controller\StudentController.php
<?php namespace App\Http\Controller; use Illuminate\Support\Facades\DB;//使用DB类 class StudentController extends Controller{ //创建名为StudentController的控制器并继承Controller基类 public function query(){ //php } }
切换至routes\web.php新建一个路由
[php]
Route::any(‘query’,’StudentController@query’);
[/php]
创建
连接数据库
配置.env文件
[php]
DB_CONNECTION=mysql[数据库的连接模式]
DB_HOST=数据库的IP地址
DB_PORT=数据库端口
DB_DATABASE=数据库库名
DB_USERNAME=数据库用户名
DB_PASSWORD=数据库密码
[/php]
配置config/database.php
[php]
‘mysql’ => [
‘driver’ => ‘mysql’, //数据库的类型
‘host’ => env(‘DB_HOST’, ‘localhost’), //数据库的位置
‘port’ => env(‘DB_PORT’, ‘3306’), //端口号
‘database’ => env(‘DB_DATABASE’, ”), //数据库名
‘username’ => env(‘DB_USERNAME’, ”), //用户名
‘password’ => env(‘DB_PASSWORD’, ”), //密码
‘charset’ => ‘utf8’, //字符集
‘collation’ => ‘utf8_unicode_ci’, //排序方式
‘prefix’ => ”, //前缀
‘strict’ => true, //Strict模式
‘engine’ => null, //引擎
],
[/php]
至此laravel即可连接上数据库了
使用DB facades完成数据库操作
SQL语句中的?是占位符,可以通过第二变量传入数组来传递数值
查询数据
[php]
DB::select(“select * from student”);//可以直接使用select语句
DB::select(“select * from student where age = ? and name = ?”,[18,’7gugu’])//等同于:select * from student where age = 18 and name = ‘7gugu’
[/php]
插入数据
[php]
DB::insert(“insert into student(name,age,sex) values(‘hzq’,’19’,’0′)”);//可以直接使用insert语句
DB::insert(“insert into student(name,age,sex) values(?,?,?)”,[‘hzq’,’19’,’0′]);//等同于:insert into student(name,age,sex) values(‘hzq’,’19’,’0′),这样子方便传值
[/php]
更新数据
[php]
DB::update(“update student set age = 1 where name =7gugu”);//可以直接使用update语句
DB::update(“update student set age = ? where name =?”,[1,’7gugu’])//等同于:update student set age = 1 where name =’7gugu’
[/php]
删除数据
[php]
DB::delete(‘delete from student where id=1002’);//直接使用delete语句
DB::delete(‘delete from student where id=?’,[‘1002’]);//等同于:delete from student where id=1002
[/php]
使用查询构造器
数据表指向器
[php]
DB::table(“数据表名”)->操作/筛选器;
DB::table(‘student’)->操作/筛选器;
[/php]
筛选器
[php]
DB::table(‘student’)->where()->操作;
where(‘id’,1001)//即可筛选id是1001的数据
where(‘id’,’=’,1001)//即可筛选id是1001的数据
where(‘id = ? and name = ?’,[1001,’7gugu’])//即可限定多个条件
[/php]
排序
[php]
/*
* @param string 字段名称
* @param string 排序方式(ASC:正序|DESC:倒序)
*/
DB::table(‘student’)->orderBy(‘字段名’,’asc|desc’)->操作;
[/php]
字段值自增
[php]
/*
* 数值自增
* @param string 字段名称
* @param int 单次自增数量
*/
DB::table(‘student’)->where(‘id’,’1001′)->increment(‘age’,1);
[/php]
字段值自减
[php]
/*
* 数值自减
* @param string 字段名称
* @param int 单次自减数量
*/
DB::table(‘student’)->where(‘id’,’1001′)->decrement(‘age’,1);
[/php]
插入数据
[php]
DB::table(‘student’)->insert([‘name’=>’7gugu’,’age’=>’18’]);//插入一条数据
DB::table(‘student’)->insert([
[‘name’=>’test’,’age’=>’20’],
[‘name’=>’guangzhou’,’age’=>’30’]
]);//使用一个数组来承载多条数据,即可插入多条数据
[/php]
更新数据
[php]
DB::table(‘student’)->where(‘id’,1004)->update([‘age’=>30]);//使用update函数即可更新指定字段的值
//laravel好像并不可以一次性更新多个字段
[/php]
删除数据
[php]
DB::table(‘student’)->where(‘id’,’1002′)->delete();
[/php]
get函数
[php]
/*
*用于获取限定条件后的数据,可以无限定条件直接获取
*/
DB::table(‘student’)->get();
[/php]
first函数
[php]
/*
* 用于获取符合限定条件的第一行的数据
* 无需传参
*/
DB::table(‘student’)->first();
[/php]
pluck函数
[php]
/*
* 获取指定名称的字段数据
*/
DB::table(‘student’)->pluck(‘name’,’age’);
[/php]
效果如图所示:
聚合函数
[php]
//count()统计表的数据总数
DB::table(‘student’)->count();
//max()比较某个字段的最大值
DB::table(‘student’)->max(‘age’);
//min()比较某个字段的最小值
DB::table(‘student’)->min(‘age’);
//avg()计算某个字段的平均值
DB::table(‘student’)->avg(‘age’);
//sum()计算某一个字段的所有数值
DB::table(‘student’)->avg(‘age’);
[/php]
truncate函数
清空表中数据[危险]
[php]
//truncate()清空表中数据[危险]
DB::table(‘student’)->truncate();
[/php]
chunk函数
用于分块查找数据(用于大量数据查找时使用)
[php]
DB::table(‘users’)->chunk(2, function($users)
{
dd($users);//每次运行仅仅查询两条数据,直至查询完毕
});
[/php]
结果如图所示:
[笔记][C语言]指针学习小结[20181206]
C语言学习小结:
指针的初始化
指针变量可以初始化为0,NULL或一个地址[16进制]
0和NULL等价,相当于一个空地址
//使用(变量类型 *变量名)这样一个组合就可以声明一个指定类型的指针变量 int *a;
- 指针变量就是用来存储变量地址的一种变量
- 指针的存储的地址指的是该变量的起始位置
指针运算符
- *指针运算符,用于把指针指向变量,可用于获取变量的值
- &取址运算符,用于获取变量的地址
- *(&a)和&(*a)的效果相同,都是获取变量的地址,只是处理的次序不同
例子:
#include <iostream> int main(){ int *a,i=100; printf("a的位置%p,i的值:%d\n",a,i); a=&i; printf("a的位置%p,a的值是%d\n",&a,*a); }
运行结果:
为什么要指定指针变量的类型?
指针变量不仅仅是要存储变量的地址,同时也要记录变量的空间大小。
因为C语言传递变量时需要把数据传入已确定的内存地址及其所占的空间,
所以一个char类型的指针不可以直接指向一个int型的变量,如果强制操作将会导致越界的bug。
指针偏移:
#include <iostream> void main() { int *a[3];//初始化整型指针 int b[3] = { 1,2,3 }; a[0] = &b[0];//将b[0]的地址赋值给a[0]存储 a[1] = &b[1]; a[2] = &b[2]; printf("a的原来指向的值%d\n", **a);//*a仅仅是获取到b的地址,**a才是获取到b的值 printf("a的变化后指向的值%d\n", **(a+1));//a+1指的是a[1]然后再重复上一行的操作 }
指针指向多维数组
#include <iostream> void main(){ int a[3][3]={1,2,3,4,5,6,7,8,9}; int *b[3]; b[0]=a[0];//在多维数组中,b[0]=a[0]会自动指向a[0]的地址,不用像一维数组,使用取址符指向a[0] b[1]=a[1]; b[2]=a[2]; printf("a[1][2]的值%d\n",*(*(b+1)+2));//现将b指向b[1],然后将b[1]指向b[1][2] }
为啥指针指向一维数组时,需要使用取址符,但是指向多维数组时的第一维时不用取址符?
因为指针指向一维数组时,b[0]代表的是一个值,而不是一个地址,所以需要使用取址符来获取这个值得地址,
但是当指针指向二维数组时,b[0]的身份是一个地址,所以就不用使用取址符就可以直接获取到地址了。
One More Thing
数组p[i]是c语言中的一种语法糖
即使函数被设计成void fun(int array[5], int n),array依然被看成是指针。也就是说即使数组带了长度,该长度也会被编译器忽略掉。(即:a[i]=>*(a+i))
一句话:形参中的数组统统看成指针。
既然如此,还不如直接写成void fun(int *array, int n)。指针的形式,更能表达本意。
array和&array都是指针,但类型不同。array的类型是int*,而&array的类型是int(*)[2]。array是指向普通int类型的指针;&array是数组指针,该数组元素是int类型的,且数组大小是2。
[笔记][laravel]模型Model的使用v1.0
怎么新建Model:
在App文件夹内新建.php文件即可。(命名方式:首字母大写,如Member.php),如图所示:
怎么使用Model:
如以下代码:
namespace App\Http\Controllers; use App\Member;//使用App/Member这个命名空间 class MemberController extends Controller{ public function info(){ return Member::getMember(); } }
即可调用Member这个model,并调用model下的getMember这个函数