晨曦远的博客

诗酒趁年华


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

thinkphp框架学习

发表于 2019-07-20 | 更新于: 2019-07-21 | 分类于 杂项 | 阅读次数: |
字数统计: 1.9k 字 | 阅读时长 ≈ 8 分钟

composer

因为我用的是phpstudy,首先要切换到php7以上要安装vc14,结果安装失败,原因是因为我安装了VS2017,然后我就有了VC2017的版本,我在控制面板把64版本的VC2017卸载,然后重新安装vc14成功。phpstudy2016自带composer1.2版本,开启openssl扩展,执行composer self-update报错:

1
2
3
4
5
6
Updating to version 1.8.6 (stable channel).
Downloading: 100%


[RuntimeException]
SHA384 is not supported by your openssl extension, could not verify the phar file integrity

我就只好自己安装了地址,安装里填的是7.2版本的php.exe,因为6.0版本的tp只支持7.1以上的php。

安装框架

切换到WWW目录,安装tp框架

1
composer create-project topthink/think tp6 6.0.*-dev

测试执行,进入到tp6文件夹下,执行

1
php think run

访问127.0.0.1::8000,可以看到欢迎界面。

阅读全文 »

docker笔记

发表于 2019-07-18 | 更新于: 2019-07-28 | 分类于 杂项 | 阅读次数: |
字数统计: 425 字 | 阅读时长 ≈ 2 分钟

安装

ubuntu使用官方脚本自动安装

1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

加入用户组

  • 创建docker用户组

    1
    sudo groupadd docker
  • 加入docker用户组

    1
    sudo usermod -aG docker ${USER}
  • 重启docker服务

    1
    sudo service docker restart
  • 切换或者退出当前账户再从新登入

    1
    2
    su root             切换到root用户
    su ${USER} 再切换到原来的应用用户以上配置才生效

docker镜像加速器

阿里云镜像加速器

镜像

  • 列出本机所有image文件

    1
    docker image ls
  • 删除image文件

    1
    docker image rm [imageName]

容器

  • 先pull一个镜像

    1
    docker pull training/webapp
  • 产生一个容器

    1
    2
    3
    docker run -d -P training/webapp python app.py
    #-d:让容器在后台运行。
    #-P:将容器内部使用的网络端口映射到我们使用的主机上。
  • 列出[所有]容器

    1
    2
    3
    4
    docker ps [-a]
    #CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    #43c2ddf7ba86 training/webapp "python app.py" 7 minutes ago Up 7 minutes 0.0.0.0:32768->5000/tcp relaxed_jepsen
    #现在访问192.168.91.134:32768,就可以看到hello world
  • 也可以自己指定端口

    1
    docker run -d -p 5000:5000 training/webapp python app.py
  • 查看 WEB 应用程序日志
    docker logs [ID或者名字] 可以查看容器内部的标准输出。

    1
    2
    3
    4
    5
    docker logs 8b64b668a789
    Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    192.168.91.1 - - [18/Jul/2019 10:38:28] "GET / HTTP/1.1" 200 -
    192.168.91.1 - - [18/Jul/2019 10:38:28] "GET /favicon.ico HTTP/1.1" 404 -
    #使用docker logs -f 8b64b668a789,可以持续查看日志
  • 查看WEB应用程序容器的进程

    1
    2
    3
    docker top 8b64b668a789
    #UID PID PPID C STIME TTY TIME CMD
    #root 15091 15063 0 18:36 ? 00:00:00 python app.py
  • 停用并删除所用容器

    1
    docker stop $(docker ps -q) & docker rm $(docker ps -aq)

redis学习

发表于 2019-07-17 | 更新于: 2019-07-18 | 分类于 杂项 | 阅读次数: |
字数统计: 2.3k 字 | 阅读时长 ≈ 9 分钟

概述

  • redis:REmote DIctionary Server是一种nosql数据库,它的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且它比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))
  • 更多命令可以查看REDIS文档
阅读全文 »

多线程爬斗图啦

发表于 2019-07-17 | 更新于: 2019-07-17 | 分类于 python学习笔记 | 阅读次数: |
字数统计: 236 字 | 阅读时长 ≈ 1 分钟

趁热打铁吧,再写一个爬虫练手,也是再次熟悉下BeautifulSoup库的使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import requests
from bs4 import BeautifulSoup
import os
import re
import threading

dirs="斗图"
headers ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}

def mkdir():
if not os.path.exists(dirs):
os.mkdir(dirs)
os.chdir(dirs)
return True
else:
print("文件夹已存在")
return False

def get_one_page(url):
res = requests.get(url, headers=headers)
content = res.content
soup = BeautifulSoup(content, 'lxml')
img_list = soup.find_all('img', attrs={'class': 'img-responsive lazy image_dta'})
one_page_list =[]
for img in img_list:
t = (img['alt'],img['data-original'])
one_page_list.append(t)
return one_page_list

def download_img(img,name,suf,i):
with open(name+ "."+suf, 'wb+') as f:
print("正在下载"+name)
f.write(img.content)

if __name__ =="__main__":
mkdir()
for i in range(1,2605):
one_page_list=get_one_page('http://www.doutula.com/photo/list/?page='+str(i))
threads=[]
for j in one_page_list:
name=re.sub('[\/:*?"<>|_]','',j[0])
suf=j[1][-3:]#获取后缀
img = requests.get(j[1])
t = threading.Thread(target=download_img,args=[img,name,suf,i])
threads.append(t)
for i in range(0,len(threads)-1):
threads[i].start()
for i in range(0, len(threads) - 1):
threads[i].join()

多线程爬妹子图

发表于 2019-07-16 | 更新于: 2019-07-17 | 分类于 python学习笔记 | 阅读次数: |
字数统计: 702 字 | 阅读时长 ≈ 3 分钟

原来的代码有点问题,改了以后成功添加多线程,都跑一分钟,多线程要多爬120张图片,这样看来效率果然高了许多。
先上普通的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import requests
import os
import re
import random


dirs="D:/妹子图"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36'}
def mkdir():
if not os.path.exists(dirs):
os.mkdir('D:/妹子图')
os.chdir('D:/妹子图')
return True
else:
print("妹子图文件夹已存在")
return False

def get_max_page():
url="https://www.mzitu.com/zipai/"
r = requests.get(url,headers=headers)
result=re.findall("<span aria-current='page' class='page-numbers current'>(.*?)</span>",r.text,re.S)
return result[0]


def find_onepage_imgs(url):
r=requests.get(url,headers=headers)
result=re.findall('<div class="comment-meta commentmetadata"><a href=".*?">(.*?)</a>.*?</div>.*?<p><img class="lazy".*?data-original="(.*?)".*?</p>',r.text,re.S)
#print(result[0][0].split())
return result
def download_img(img,path,i):
with open(path+str(int(random.random()*100)) + ".jpg", 'wb+') as f:
print("下载第" + str(i) + "页提交于" + path + "的图片")
f.write(img.content)


if __name__== '__main__':
mkdir()
print (os.getcwd())

max_page=get_max_page()
for i in range(int(max_page),1,-1):
onepage_list=find_onepage_imgs("http://www.mzitu.com/zipai/comment-page-"+ str(i)+"/#comments" )
for j in onepage_list:
path=j[0].split()
path=path[0][0:4]+path[0][5:7]+path[0][8:10]+path[1]+path[2][0:2]+path[2][3:5]
img=requests.get(j[1])
download_img(img,path,i)

必须要说的是,之前下载图片名称是网站上的提交时间,然后提交时间会有相同,所以我判断如果文件名相同则文件名加排序。现在我直接在文件名后加一个随机数,就不用那么麻烦了。下面是多线程爬虫:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import requests
import os
import re
import random
import threading
dirs = "D:/妹子图"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4094.1 Safari/537.36'}


def mkdir():
if not os.path.exists(dirs):
os.mkdir('D:/妹子图')
os.chdir('D:/妹子图')
return True
else:
print("妹子图文件夹已存在")
return False


def get_max_page():
url = "https://www.mzitu.com/zipai/"
r = requests.get(url, headers=headers)
result = re.findall("<span aria-current='page' class='page-numbers current'>(.*?)</span>", r.text, re.S)
return result[0]


def find_onepage_imgs(url):
r = requests.get(url, headers=headers)
result = re.findall(
'<div class="comment-meta commentmetadata"><a href=".*?">(.*?)</a>.*?</div>.*?<p><img class="lazy".*?data-original="(.*?)".*?</p>',
r.text, re.S)
# print(result[0][0].split())
return result
def download_img(img,path,i):
with open(path+str(int(random.random()*100)) + ".jpg", 'wb+') as f:
print("下载第" + str(i) + "页提交于" + path + "的图片")
f.write(img.content)


if __name__ == '__main__':
mkdir()
print(os.getcwd())

max_page = get_max_page()
for i in range(int(max_page), 1, -1):
onepage_list = find_onepage_imgs("http://www.mzitu.com/zipai/comment-page-" + str(i) + "/#comments")
threads=[]
for j in onepage_list:
path = j[0].split()
path = path[0][0:4] + path[0][5:7] + path[0][8:10] + path[1] + path[2][0:2] + path[2][3:5]
img = requests.get(j[1])
t=threading.Thread(target=download_img,args=(img,path,i))
threads.append(t)
for i in range(0, len(threads) - 1):
threads[i].start()
for i in range(0, len(threads) - 1):
threads[i].join()

Django框架学习

发表于 2019-07-14 | 更新于: 2019-07-17 | 分类于 python学习笔记 | 阅读次数: |
字数统计: 2.3k 字 | 阅读时长 ≈ 10 分钟

搭建虚拟环境

安装virtualenv

1
pip3 install virtualenv
  • 开辟虚拟空间

    1
    2
    3
    virtualenv Django
    #也可以通过-p参数指定python解释器
    virtualenv -p C:\Python27\python.exe [virtualenv name]
  • 激活虚拟环境

    1
    2
    3
    linux/mac: source Django/bin/activate
    windows: cd Django/Scripts 执行activate
    退出虚拟环境: deactivate
阅读全文 »

code-breaking2018代码审计学习

发表于 2019-07-13 | 更新于: 2019-07-13 | 分类于 web安全学习笔记 | 阅读次数: |
字数统计: 957 字 | 阅读时长 ≈ 4 分钟

我现在这个水平, 每做一道题都会触及到知识盲区,只好看wp做做总结,先拓宽知识储备吧。
github地址

easy – function

1
2
3
4
5
6
7
8
9
<?php
$action = $_GET['action'] ?? '';
$arg = $_GET['arg'] ?? '';

if(preg_match('/^[a-z0-9_]*$/isD', $action)) {
show_source(__FILE__);
} else {
$action('', $arg);
}

这道题想让我们知道\的作用。php里默认命名空间是\,所有原生函数和类都在这个命名空间中。普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路径;而如果写\function_name()这样调用函数,则其实是写了一个绝对路径。如果你在其他namespace里调用系统类,就必须写绝对路径这种写法。
然后就可以利用create_function()任意代码执行。

阅读全文 »

flask框架学习

发表于 2019-07-09 | 更新于: 2019-07-16 | 分类于 python学习笔记 | 阅读次数: |
字数统计: 1.2k 字 | 阅读时长 ≈ 5 分钟

搭建虚拟环境

安装virtualenv

1
pip3 install virtualenv

开辟虚拟空间

1
virtualenv flask-env

激活虚拟环境

1
2
3
linux/mac: source flask-env/bin/activate
windows: cd flask-env/Scripts 执行activate
退出虚拟环境: deactivate

阅读全文 »
1234…6
晨曦远

晨曦远

46 日志
8 分类
23 标签
RSS
GitHub 知乎 微信 QQ
友情链接
  • 关校花的博客
  • 张嘉学长的博客
  • 郁离歌
  • 皮三宝

0%
© 2018 — 2019 晨曦远 | Site words total count: 46k
本站访客数: