2018年12月

Python之网络编程

每一门编程语言最经典的就是实现网络Socket编程,Python肯定也有这方面的库和函数,下面就来谈谈Python的Socket编程

ps:这篇文章是博主在火车上码的,有些水,实在是没事干,大佬勿喷(手动滑稽)

1.本次模块

socket

2.UDP通信

server.py

#!/usr/bin/env python
# coding=utf-8

import socket
# 创建UDP套接字
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 定义ip地址及端口
local_addr = ("",7709)
# 绑定地址
s.bind(local_addr)
# while循环实现一直接收信息
while True :
    # 接收消息,返回的是消息以及ip地址端口
    recv_data = s.recvfrom(1024)
    # 对消息进行解码
    msg = recv_data[0].decode("utf-8")
    # 判断,如果退出,服务器退出
    if msg == "exit":
        break;
    print(msg)
# 关闭套接字
s.close()

client.py

#!/usr/bin/env python
# coding=utf-8
import socket
# 创建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 初始化服务器端口地址
send_addr = ("",7709)
# while循环
while True:
    # 中断发送消息
    send_data = input("请输入要发送的消息:")
    # 发送到服务器
    s.sendto(send_data.encode("utf-8"),send_addr)
    # 判断是否退出
    if send_data == "exit":
        break;
# 关闭套接字        
s.close()

3.TCP

server.py

#!/usr/bin/env python
# coding=utf-8

import socket

# 设置服务器的绑定地址及端口
server_addr = ("",7709)

# 创建tcp套接字
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 绑定本地地址及端口
server_socket.bind(server_addr)

# 将tcp套接字转换为被动链接状态
server_socket.listen(128)

while True :
# while循环实现多个客户端进行连接
    print("服务器等待连接~~~~")
    # 每当一个客户端进行连接的时候,创建一个新的套接字,并获得客户端ip地址
    client_socket,client_addr = server_socket.accept()
    print("ip:%s的客户端已经连接" % (str(client_addr)))
    # 当一个客户端进行连接时,一直循环接收这个客户端的信息
    while True :
        recv_data = client_socket.recv(1024)
        print("%s:%s" %(str(client_addr),recv_data.decode("utf-8")))
        if recv_data:
            pass
            if recv_data.decode("utf-8") == "exit":
                exit()
        else :
            break;
    print("ip:%s的客户端已经断开" % (str(client_addr)))
    client_socket.close()

client.py

#!/usr/bin/env python
# coding=utf-8
import socket
# 创建套接字 tcp套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 初始化ip地址及端口
server_addr = ("",7709)
# 连接套接字
s.connect(server_addr)
# 死循环,当信息收到exit时候退出循环,断开连接
while True:
    
    send_data = input("请输入要发送的数据:")

    s.send(send_data.encode("utf-8"))

    if send_data == "exit":
        break;
# 关闭套接字    
s.close()

4.Tips

QQ:770925351

Email:770925351@qq.com

WeChat:tc770925351

因为最近一直在实验室待着,上外网需要打开浏览器登陆校园网,但是第二天一关机就得重新登陆,我这种懒人实在受不了这种繁琐的步骤,就写了一个自动登陆校园网的Python脚本,下面说一下实现方法和思路:

1.需求分析

其实登陆校园网的过程就是一个POST请求,最近一直在学习相关Python爬虫方面的知识,requests这个库就可以完全实现这个请求,原理已经搞清楚,接下来就开始搞起

2.浏览器分析请求头以及POST请求参数

校园网的登陆地址是:http://210.31.224.243

按下浏览器F12进行分析,需要构造的请求头和传入的参数如下:

    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding':'gzip, deflate',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Cache-Control':'max-age=0',
    'Connection':'keep-alive',
    'Content-Length':'74',
    'Content-Type':'application/x-www-form-urlencoded',
    'Host':'210.31.224.243',
    'Origin':'http://210.31.224.243',
    'Referer':'http://210.31.224.243/0.htm',
    'Upgrade-Insecure-Requests':'1',
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'

3.源码

import requests
url = 'http://210.31.224.243'
headers = {
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding':'gzip, deflate',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'Cache-Control':'max-age=0',
    'Connection':'keep-alive',
    'Content-Length':'74',
    'Content-Type':'application/x-www-form-urlencoded',
    'Host':'210.31.224.243',
    'Origin':'http://210.31.224.243',
    'Referer':'http://210.31.224.243/0.htm',
    'Upgrade-Insecure-Requests':'1',
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}
data = {
    'DDDDD':'学号',
    'upass':'密码',
    '0MKKey':'%B5%C7%A1%A1%C2%BC',
    'v6ip':'',
    'save_me':'1'
}
r = requests.post(url,headers=headers,data=data)
print(r.status_code)
200

显示出我们熟悉的200,请求成功!

4.Tips(博主联系方式)

QQ:770925351

Email:770925351@qq.com

Python 3 原生爬虫

博主最近学习了Python 3的有关爬虫方面的知识,只是限于简单的原生爬虫,技术性并不高,求大佬轻喷,多多给予我这个小菜鸟一些支持,谢谢大家

本次项目用到的模块:

matplotlib:用于画图

wordcloud:分析数据,画出词云

requests:爬取数据

time:减速请求速度,防止ip被封

re:匹配正则表达式

1.爬取猫眼电影TOP100

  • 项目分析

目标URL:https://maoyan.com/board/4

GET请求:通过分析,url通过请求一个参数offset,每页10部电影,url的地址规律为页数x10

正则表达式:<p class="name">.*?>(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?<i class="integer">(.*?)</i><i class="fraction">(.*?)</i>

  • 猫眼电影Top100.py
#!/usr/bin/env python
# coding=utf-8
''' 导入库 '''
import requests
import re
import time
''' 初始化存储电影的列表'''
movies = []
''' 初始化电影编号 '''
number = 1
''' 主方法 '''
def main(offet,number):
    ''' 设置爬取的url'''
    url = 'https://maoyan.com/board/4?offset=' + str(offet)
    ''' 设置请求头,模拟真实浏览器'''
    headers = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'    
    }
    ''' 请求数据 '''
    r = requests.get(url,headers=headers)
    ''' 匹配正则 '''
    results = re.findall('<p class="name">.*?>(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>.*?<i class="integer">(.*?)</i><i class="fraction">(.*?)</i>',r.text,re.S)
    ''' 格式化数据,获取电影的名称,演员,上映时间,电影得分 '''
    for result in results:
        movie = {}
        movie['排名'] = number
        movie['电影名称'] = result[0]
        movie['演员'] = result[1].strip()
        movie['上映时间'] = result[2]
        movie['分数'] = result[3] + result[4]
        movies.append(movie)
        number += 1
''' 电影一共10页,进行10次请求 '''
for i in range(10):
    main(i * 10,number)
    number += 10
    time.sleep(1)
''' 将数据存入文件'''
with open('result.txt','w') as file:
    for x in movies:
        for key,value in x.items():
            file.write(key + ":" + str(value) + " ")
        file.write('\n')

2.爬取热门电视剧电影豆瓣评论,分析出观众对于该部影视的关键词

① 电影 "毒液"

  • 项目分析

目标URL:https://movie.douban.com/subject/3168101/comments?start=' + page_number + '&limit=20&sort=new_score&status=P

GET请求分析:start参数代表了页面评论是从多少条开始,第一页是0,第二页是20,以此类推,获得url规律为页数x20

正则表达式:<span class="short">(.*?)</span>

  • 毒液.py
#!/usr/bin/env python
# coding=utf-8
''' 导入库'''
import requests 
import time
import re
import matplotlib.pyplot as plt
from wordcloud import WordCloud
''' 主方法 '''
def main(page_number):   
    ''' 设置url'''
    url = 'https://movie.douban.com/subject/3168101/comments?start=' + page_number + '&limit=20&sort=new_score&status=P'
    ''' 设置请求头,Cookies设置自己的Cookies'''
    headers = {
        'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        'Cookie':'*****'
    }
    ''' 请求数据 '''
    r = requests.get(url,headers=headers)
    ''' 格式化正则表达式 '''
    pattern = re.compile('<span class="short">(.*?)</span>',re.S)
    ''' 匹配正则表达式'''
    results = re.findall(pattern,r.text)
    ''' 写入数据 '''
    with open('毒液.txt','a') as file :
        for result in results :
            file.write(result)
            file.write('\n')
            file.write('\n')
            
''' 豆瓣评论一共25页 '''
for i in range(25):
    main(str(i * 20))
    time.sleep(1)
''' 读取数据 '''
with open('毒液.txt') as f:
    text = f.read()
    ''' 初始化词云 '''
    wordcloud = WordCloud(width=3500,height=2000,background_color='white',font_path='./simfang.ttf').generate(text)
    ''' 设置图表清晰度和其他参数'''
    plt.figure(dpi=256)      
    plt.imshow(wordcloud,interpolation='bilinear')
    plt.axis('off')
    ''' 保存词云 '''
    plt.savefig("毒液.png")
  • 分析结果如下图所示:
    毒液

② 电视剧 "如懿传"

目标URL:https://movie.douban.com/subject/25812730/comments?start=' + page_number + '&limit=20&sort=new_score&status=P

GET请求分析:start参数代表了页面评论是从多少条开始,第一页是0,第二页是20,以此类推,获得url规律为页数x20

正则表达式:<span class="short">(.*?)</span>

  • 如懿传.py
#!/usr/bin/env python
# coding=utf-8
''' 导入库 '''
import requests 
import time
import re
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS
stopwords = set(STOPWORDS)
''' 设置屏蔽词 '''
stopwords.add("gt")
stopwords.add("如懿传")
stopwords.add("如懿")
stopwords.add("甄嬛传")
stopwords.add("金枝欲孽")
stopwords.add("延禧攻略")
''' 主方法 '''
def main(page_number):  
    ''' 设置url '''
    url = 'https://movie.douban.com/subject/25812730/comments?start=' + page_number + '&limit=20&sort=new_score&status=P'
    ''' 设置请求头,Cookies设置自己的Cookies'''
    headers = {
        'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36',
        'Cookie':'*****',
        'Host':'movie.douban.com'
    }
    ''' 请求数据 '''
    r = requests.get(url,headers=headers)
    ''' 格式化正则表达式 '''
    pattern = re.compile('<span class="short">(.*?)</span>',re.S)
    ''' 正则匹配 '''
    results = re.findall(pattern,r.text)
    ''' 写入数据 '''
    with open('如懿传.txt','a') as file :
        for result in results :
            file.write(result)
            file.write('\n')
            file.write('\n')
''' 评论共25页 '''
for i in range(25):
    main(str(i * 20))
    time.sleep(1)
''' 读取数据 '''
with open('如懿传.txt') as f:
    text = f.read()
    wordcloud = WordCloud(stopwords='如懿传',width=3500,height=2000,background_color='white',font_path='./simfang.ttf').generate(text)
    plt.figure(dpi=256)
    plt.imshow(wordcloud,interpolation='bilinear')
    plt.axis('off')
    plt.savefig('./如懿传.png')
  • 分析结果如下图所示

如懿传

③ 电视剧 "延禧攻略"

目标URL:https://movie.douban.com/subject/25812730/comments?start=' + page_number + '&limit=20&sort=new_score&status=P

GET请求分析:start参数代表了页面评论是从多少条开始,第一页是0,第二页是20,以此类推,获得url规律为页数x20

正则表达式:<span class="short">(.*?)</span>

  • 延禧攻略.py

代码思路与前两个一致,故不标注释了

#!/usr/bin/env python
# coding=utf-8
import requests 
import time
import re
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS
stopwords = set(STOPWORDS)
stopwords.add("gt")
stopwords.add("如懿传")
stopwords.add("甄嬛传")
stopwords.add("金枝欲孽")
stopwords.add("延禧攻略")
def main(page_number):
    url = 'https://movie.douban.com/subject/26999852/comments?start=' + page_number + '&limit=20&sort=new_score&status=P'
    headers = {
        'User-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36',
        'Cookie':'*****',
        'Host':'movie.douban.com'
    }
    r = requests.get(url,headers=headers)
    pattern = re.compile('<span class="short">(.*?)</span>',re.S)
    results = re.findall(pattern,r.text)

    with open('延禧攻略.txt','a') as file :
        for result in results :
            file.write(result)
            file.write('\n')
            file.write('\n')

for i in range(25):
    main(str(i * 20))
    time.sleep(1)

with open('延禧攻略.txt') as f:
    text = f.read()
    wordcloud = WordCloud(stopwords=stopwords,width=3500,height=2000,background_color='white',font_path='./simfang.ttf').generate(text)
    plt.figure(dpi=256)
    plt.imshow(wordcloud,interpolation='bilinear')
    plt.axis('off')
    plt.savefig('./延禧攻略.png')
  • 分析结果如下图所示:

延禧攻略

3.结论

毒液的关键词有:loser 寄生兽
如懿传的关键词有:周迅 霍建华 演技在线
延禧攻略的关键词有:皇后 好看

Tips

源码以及数据已经分享到Github:Python3 原生爬虫
有需要的朋友可以自行下载观看

Brook---一款优秀的小众代理软件(酸酸乳和酸酸的完美替代品)

本教程更新自2018-12-10 10:17:05,如果部分失效请尽快联系博主进行更正

1.简介

官方Github地址:https://github.com/txthinking/brook

  • Brook是什么?

Brook是一个跨平台(Linux / MacOS / Windows / Android / iOS)代理/ vpn软件

  • Brook可以干嘛?

如果你有自己的服务器,你可以利用它搭建自己的VPN,还可以科学上网

  • Brook的优点
  1. Brook的目标是保持简单,数据加密,隐蔽性高
  2. 支持全平台

2.用法

下面是官方readme文档给出的用法简介:

NAME:
   Brook - A Cross-Platform Proxy/VPN Software

USAGE:
   brook [global options] command [command options] [arguments...]

VERSION:
   20181212

AUTHOR:
   Cloud <cloud@txthinking.com>

COMMANDS:
     server        Run as server mode
     servers       Run as multiple servers mode
     client        Run as client mode
     tunnel        Run as tunnel mode on client-side
     tproxy        Run as tproxy mode on client-side, transparent proxy, only works on Linux
     vpn           Run as VPN mode on client-side
     ssserver      Run as shadowsocks server mode, fixed method is aes-256-cfb
     ssservers     Run as shadowsocks multiple servers mode, fixed method is aes-256-cfb
     ssclient      Run as shadowsocks client mode, fixed method is aes-256-cfb
     socks5        Run as raw socks5 server
     relay         Run as relay mode
     relays        Run as multiple relays mode
     qr            Print brook server QR code
     socks5tohttp  Convert socks5 to http proxy
     systemproxy   Set system proxy with pac url, or remove, only works on MacOS/Windows
     help, h       Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d               Enable debug
   --listen value, -l value  Listen address for debug (default: ":6060")
   --help, -h                show help
   --version, -v             print the version

从上面文档我们不难看出,这款小众代理Brook支持的模式和功能多种多样的,有vpn模式,socks5代理模式,还兼容shadowsocks协议,下面博主就来教大家如何搭建并使用这款服务.

3.安装

  • 获取当前文件夹(一般都在/root下)
pwd
  • 获取Brook最新版本并下载
brook_ver=$(wget -qO- "https://github.com/txthinking/brook/tags"| grep "/txthinking/brook/releases/tag/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//') && echo ${brook_ver}
wget -N --no-check-certificate "https://github.com/txthinking/brook/releases/download/${brook_ver}/brook"
  • 增加执行权限
chmod +x brook
  • 启动服务
./brook server -l :端口号 -p 设置密码
  • 注意
  1. 这里你设置的端口号必须开防火墙,具体怎么开自己访问百度
  2. 这样启动并不是万全之策,这里会占用你的前台进程,万全之策是将这个设置成服务

4.配置服务器服务

  • 新建文件brook.service
vim /lib/systemd/system/brook.service
  • 在文件中填入以下信息
[Unit]
Description=brook service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/brook server -l :端口号 -p 密码
# 这里的/brook前面的部分需要视情况而定,根据你下载的Brook所在的目录,用pwd获取
[Install]
WantedBy=multi-user.target
  • 保存并退出

5.启动配置好的服务

systemctl start brook # 启动brook
systemctl stop brook # 停止brook
systemctl status brook # 查看brook服务状态
systemctl restart brook # 重启brook服务
systemctl enable brook # 将brook加入开机启动项

6.使用并连接服务

  • Windows

在这个页面下载Windows界面客户端

https://github.com/txthinking/brook/releases/download/v20181212/Brook.exe

打开之后是以下图片

Brook
第一行协议选择Brook
第二行填如下格式你的服务器IP:端口号
第三行填写你刚才设置的密码

点击save,关闭窗口,此时你的桌面右下角任务栏里面会出现一个小钥匙的标志,右击它,在菜单中选择start,这样你就可以愉快的冲浪了

  • Android

在这个页面下载Windows界面客户端

https://github.com/txthinking/brook/releases/download/v20181212/Brook.apk

打开之后是以下图片

Brook
第一行协议选择Brook
第二行填如下格式你的服务器IP:端口号
第三行填写你刚才设置的密码
点击开始,你就可以愉快的冲浪了

  • Mac

在这个页面下载Mac界面客户端

https://github.com/txthinking/brook/releases/download/v20181212/Brook.dmg

打开之后界面与Windows相似,用法也与Windows相似,详情请看Windows使用

  • IOS

这个需要你从国外的商店里下载Brook,需要一个国外的ios帐号,用法和Android一样

  • Linux

Linux下Brook官方并没有提供界面客户端,只有命令行形式,但是,博主比较懒,用Qt写了一个界面客户端,下面就介绍以下两种使用方法

  • 命令行

在下面的地址下载brook最新版

https://github.com/txthinking/brook/releases/download/v20181212/brook

用下面的命令在终端启动

brook client -l 127.0.0.1:1080 -i 127.0.0.1 -s 服务器IP:端口 -p 密码 

这样你进入浏览器之后,设置以下socks5代理,就可以愉快的上网冲浪了

  • GUI

下载我在Github发布的GUI客户端

https://github.com/770925351/Brook-GUI-For-Linux/releases/download/v1.0/Application-x86_64.AppImage

下载到本地之后增加执行权限

chmod +x Application-x86_64.AppImage

双击文件,会出现以下界面

Brook

填入你的ip,端口号以及密码,点击开始,就可以愉快的上网冲浪了

7.我的微信公众号,欢迎各位的关注,有问题请在后台留言,或者加qq群764374820

我的微信公众号

近期从wordpress转站到Typecho,被Typecho的简洁大方击中内心,机缘巧合之下更是找到RAW这款简约而不失大方的主题,一下子被其所吸引,在刚拿到这个模板的时候我就加入了建站时间的倒计时,不过是在页底,后来开发RAW这款主题的博主也添加了这个模块,而且是在主页左侧,我个人觉得很好看就把这个挪了过来,可能博主的版本用了pajx方法,我的方法比较低端,直接用了一个div包了一段script,下面就把方法分享给大家:

  • 进入网站后台,控制台-->外观-->编辑当前外观-->编辑nav-left.php,将下面这些代码添加到图示位置即可
<div class="nav-left-panel" style="animation-delay:0.2s"><span align="center"><i class="fa fa-heart"></i> 感谢陪伴</span><p align="center" id="runtime_span" style="color:red;font-weight:bold;"></p><script type="text/javascript">function show_runtime(){window.setTimeout("show_runtime()",1000);X=new Date("2/10/2018 0:00:00");Y=new Date();T=(Y.getTime()-X.getTime());M=24*60*60*1000;a=T/M;A=Math.floor(a);b=(a-A)*24;B=Math.floor(b);c=(b-B)*60;C=Math.floor((b-B)*60);D=Math.floor((c-C)*60);runtime_span.innerHTML=A+"天"+B+"小时"+C+"分"+D+"秒"}show_runtime();</script></div>

示意图

  • 之后你就可以实现建站时间的演示了,如下图所示:
    示意图
  • 再次感谢RAW主题的开发者,也是在他的创意基础上进行修改,尊重原创,尊重劳动成果,这是他的博客:

熊猫小A的博客

一键安装KMS服务脚本(搬运)

KMS,是 Key Management System 的缩写,也就是密钥管理系统。这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Windows 和 Office 的 KMS 啦。经常能在网上看到有人提供的 KMS 服务器地址,那么你有没有想过自己也来搞一个这样的服务呢?而这样的服务在 Github 上已经有开源代码实现了。
本文就是在这个开源代码的基础上,开发了适用于三大 Linux 发行版的一键安装 KMS 服务的脚本。

本脚本使用环境

系统支持:CentOS 6+ Debian 7+ Ubuntu 12+
虚拟技术:任意
内存要求:≥128M

关于本脚本

1、本脚本适用于三大 Linux 发行版,其他版本则不支持。
2、KMS 服务安装完成后会加入开机自启动。
3、默认记录日志,其日志位于 /var/log/vlmcsd.log。

安装方法

  • root用户登录你服务器,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/kms.sh && chmod +x kms.sh && ./kms.sh
  • 安装完成后,输入以下命令查看端口号 1688 的监听情况:
netstat -nxtlp | grep 1688

​ 返回值类似于如下这样就表示 OK 了:

tcp        0      0 0.0.0.0:1688                0.0.0.0:*                   LISTEN      3200/vlmcsd         
tcp        0      0 :::1688                     :::*                        LISTEN      3200/vlmcsd 
  • 本脚本安装完成后,会将 KMS 服务加入开机自启动。

使用命令:

启动:/etc/init.d/kms start
停止:/etc/init.d/kms stop
重启:/etc/init.d/kms restart
状态:/etc/init.d/kms status

卸载方法:

  • 使用 root 用户登录,运行以下命令:
./kms.sh uninstall

如何使用kms服务

KMS 服务,用于在线激活 VOL 版本的 Windows 和 Office。
激活的前提是你的系统是批量授权版本,即 VL 版,一般企业版都是 VL 版。而 VL 版本的镜像一般内置 GVLK key,用于 KMS 激活。
下面列表里面含有的产品的 VL 版本或者能使用 key 进入 KMS 通道的产品,都支持使用 KMS 激活,下面是支持kms的产品

Office 2019 & Office 2016:https://docs.microsoft.com/en-us/DeployOffice/vlactivation/gvlks
Office 2013:https://technet.microsoft.com/zh-cn/library/dn385360.aspx
Office 2010:https://technet.microsoft.com/zh-cn/library/ee624355(v=office.14).aspx
Windows:https://docs.microsoft.com/zh-cn/windows-server/get-started/kmsclientkeys

Windows 激活

  • 使用管理员权限运行 cmd 查看系统版本,命令如下:
wmic os get caption
  • 使用管理员权限运行 cmd 安装从上面列表得到的 key,命令如下:
slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
  • 使用管理员权限运行 cmd 将 KMS 服务器地址设置为你自己的 IP 或 域名,后面最好再加上端口号(:1688),命令如下:
slmgr /skms Your IP or Domain:1688

注意:本脚本所做的工作就是此步骤。当你的 KMS 服务出于启动状态,那么此处就可以设置为你自己的 KMS 服务器地址。

  • 使用管理员权限运行 cmd 手动激活系统,命令如下:
slmgr /ato

Office激活

  • 关于 Office 的激活,要求必须是 VOL 版本,否则无法激活。
    找到你的 Office 安装目录,32 位默认一般为 C:Program Files (x86)Microsoft OfficeOffice16

64 位默认一般为 C:Program FilesMicrosoft OfficeOffice16
Office16 是 Office 2016,Office15 就是 Office 2013,Office14 就是 Office 2010。
打开以上所说的目录,应该有个 OSPP.VBS 文件。

  • 使用管理员权限运行 cmd 进入 Office 目录,命令如下:
cscript ospp.vbs /sethst:Your IP or Domain
  • 使用管理员权限运行 cmd 手动激活 Office,命令如下:
cscript ospp.vbs /act

注意: KMS 方式激活,其有效期只有 180 天。
每隔一段时间系统会自动向 KMS 服务器请求续期,请确保你自己的 KMS 服务正常运行。

常见错误对策

如果遇到在执行过程报错,请按以下步骤检查:
1,你的 KMS 服务器是否挂了?
2,你的 KMS 服务是否正常开启?
3,你的系统或 Office 是否为批量 VL 版本?
4,你的系统或 Office 是否修改过 Key 或未安装 GVLK Key?
5,你是否以管理员权限运行 cmd?
6,你的网络连接是否正常?
7,你的本地 DNS 解析是否正常?
8,如果你排除了以上的对策,那请根据错误提示代码自行搜索原因。

搬运自:https://teddysun.com/530.html

Python 学习之抓取Github数据,分析出最受欢迎的项目

本次学习目的:学习使用web_api的使用

本次所用模块:requests pygal

Python版本:3.5

1.配置环境

  • 安装requests

    • Linux
pip install --user requests
  • Windows

python -m pip install --user requests

  • 安装pygal

详情请见Python之matplotlib基础学习(绘制折线图、散点图、直方图

2.实战练习

  • get_info.py
import requests
import pygal
''' 定义查询类 '''
class GetRepo():
    ''' 获取查询的api接口地址 '''
    def get_url(self,language):
        url = 'https://api.github.com/search/repositories?q=language:' + language + '&sort=stars'
        return url

    ''' 通过API请求获取数据,并进行数据分析 '''
    def get_data(self,url):
        ''' 定义获取项目名字的列表,以及要传入的y轴数据列表,y轴数据列表是每一个是字典的元素,包含了y轴的值,标签,以及链接 '''
        names = []
        plot_dicts_stars = []
        plot_dicts_forks = []

        ''' 获取API返回的数据:'''
        r = requests.get(url)

        ''' 查看是否获取成功,返回200即为成功 '''
        print("Status code:",r.status_code) 

        ''' 将获取到的数据进行json格式化,返回的是一个字典格式
            dict_keys(['total_count', 'incomplete_results', 'items'])
        '''
        response_dict = r.json() 

        ''' 获取的仓库的条目,返回的条目是一个字典 '''
        repo_dicts = response_dict['items']
        ''' 遍历条目字典 '''
        for repo_dict in repo_dicts :

            ''' 获得每个仓库的名字,并保存在列表中 '''
            names.append(repo_dict['name'])

            ''' 获得每个仓库的star数量 简介 项目地址,保存在一个字典中是因为要传给pygal图表的y轴 '''
            plot_dict_star = {
                'value':repo_dict['stargazers_count'],
                'label':str(repo_dict['description']),
            } 
            ''' 获得每个仓库的fork数量 简介 项目地址,保存在一个字典中是因为要传给pygal图表的y轴 '''
            plot_dict_fork = {
                'value':repo_dict['forks'],
                'label':str(repo_dict['description']),
            } 

            ''' 将获取到的数据加入到列表中 '''
            plot_dicts_stars.append(plot_dict_star)
            plot_dicts_forks.append(plot_dict_fork)
        '''返回分析出的项目名字,星星数量,fork数量'''
        return names,plot_dicts_stars,plot_dicts_forks
    '''获取对图表的设置参数'''
    def get_config(self):
        my_config = pygal.Config()
        my_config.x_label_rotation = 45 # 设置x轴标签旋转45度
        my_config.title_font_size = 24 # 设置图标标题字体大小
        my_config.label_font_size = 14 # 设置标签字体大小 主标签
        my_config.major_label_font_size = 18 # 设置 副标签字体大小
        my_config.truncate_label = 15  # 将较长的项目名称截断为15个字符
        my_config.show_y_guides = False #隐藏表中的水平线
        my_config.width = 1000 #设置图表宽度
        return my_config
  • draw_chart.py
'''导入需要的模块'''
import pygal
'''导入自己写的类'''
from get_info import GetRepo
'''要求用户输入想要分析的语言名称:(C,PHP,Python等)'''
language = input("Please Input The Language:")
'''新建类'''
get_repo = GetRepo()
'''获取api地址'''
url = get_repo.get_url(language)
'''通过api进行数据分析,返回分析的结果'''
result = get_repo.get_data(url)
'''画图'''
chart = pygal.Bar(get_repo.get_config()) #初始化图表对象
'''设置图表标题'''
chart.title = "Most-Starred " + language + " Projects on Github" #初始化图标标题
'''传入x轴y轴数据'''
chart.x_labels = result[0]
chart.add("stars",result[1]) #传入y轴参数
chart.add("forks",result[2])
'''保存图表文件'''
chart.render_to_file("repos_" + language + ".svg")

C

C语言

C++

C++

Java

Java

Python

Python