所有由Python实用宝典发布的文章

Python 优秀开源项目推荐—实时语音克隆等 (2019年8月)

1. 实时语音克隆: 非常流弊的项目,能在5秒钟内克隆对象的语音实时生成任意文本语音,而且生成的语音非常非常像!By Corentin Jemine.

实时语音克隆

2. 婴儿名字分析:将数据集“社会保障卡应用程序的婴儿名字”的数据进行抽取、转换、加载和分析。

婴儿名字分析

3.Pyrobot:PyRobot 开源机器人研究平台。PyRobot是一个轻量级的Python高级接口,为机器人操作和导航提供api。该开源还包含了LoCoBot的底层堆栈,LoCoBot是一种低成本的移动机械手硬件平台。

PyRobot

4.苹果嗅探器 Apple_bleee:一个可以知道苹果手机当前状态的蓝牙嗅探器,如是否开了WIFI、当前界面是否在桌面、是否正在拨通电话、是否正在锁屏状态等等。

蓝牙嗅探器

5.Gryphon:强大,可靠且可扩展的开源软件框架, 用于构建和运行加密货币市场中的算法交易策略,可以任何频率建立交易策略。

Gryphon

文章到此就结束啦,如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 反编译调用有道翻译(附完整代码)

网易有道翻译是一款非常优秀的产品,他们的神经网络翻译真的挺无敌。无奈有道客户端实在是太难用了,而且在某些具体场景(比如对网站进行批量翻译)无法使用,而有道的云服务又特别的贵,一般人是无法支付得起的。

然而理论上而言,所有看得见的东西都是爬得到的,有道翻译接口也一样。为了祖国未来花朵(咸鱼) 的发展,今天就来给大家介绍一下如何用 Python超简单快速地调用有道翻译得到翻译结果 。此外,本教程仅供学习哦。

如果你懒得看教程,只想要拿到源代码,请关注Python实用宝典公众号并回复:“Python有道接口” 。

1.找到翻译相关接口

打开 fanyi.youdao.com 随便输入一个单词进行翻译,使用开发者工具(空白处右键检查或F12)查看请求数据。

可以看到,请求的接口是:
http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

开发者工具往下拉,查看Form Data得到请求的body是:

  1. i: 你好
  2. from: AUTO
  3. to: AUTO
  4. smartresult: dict
  5. client: fanyideskweb
  6. salt: 15707931034929
  7. sign: 99d0fc48506346afc40e36d5648cc320
  8. ts: 1570793103492
  9. bv: ca3dedaa9d15daa003dbdaaa991540d1
  10. doctype: json
  11. version: 2.1
  12. keyfrom: fanyi.web
  13. action: FY_BY_REALTlME

2.解析请求body内容

显然,以上body内容中,i 是需要翻译的文本,from是原文语言,to是翻译语言。我们其他的参数只需要设置为一致的即可。现在需要解决这几个参数:salt, sign, bv,ts.

ts从格式上看就知道是时间戳,而且ts和salt内容很接近,且只差了一位,可以合理猜测,salt就是ts+1位随机数。

接下来就差sign和bv,这两个值看起来非常像MD5,不过不确定是什么参数的MD5,因此需要阅读前端源代码。

在performance中录制,重新请求接口,找到翻译接口的前端代码(fanyi.min.js).然后搜索我们的关键词sign或者bv. 使用debug工具查看值的流动。

从这里我们可以知道,bv 即浏览器头部信息MD5的值,我的浏览器头部是这样的: “5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36”

实际上在请求接口的时候随便用什么头部都能过这个校验,只要符合标准就行。

最后一个未知参数是sign. 同样,我们打开debug模式,输入信息,就可以得到其值了。

很显然,sign由n.md5(“fanyideskweb” + e + i + “n%A-rKaT5fb[Gy?;N5@Tj”)组成,而e根据debug显示的结果,就是我们需要翻译的信息,而i就是salt. 因此4个参数我们全部成功反编译!

3. 用Python调用接口进行翻译

我们只需要伪造请求的body,向接口发送post请求即可得到翻译结果。比如,ts是13位时间戳,在Python中可以使用time.time()*1000获得:

ts = str(int(time.time()*1000))

salt是ts+一位随机数,太简单了:

salt = ts + str(random.randint(0, 9))

bv是浏览器User-Agent,需要进行MD5计算,我们新建一个MD5函数,将字符串传入函数获得MD5。

def get_md5(string):
    string = string.encode('utf-8')
    md5 = hashlib.md5(string).hexdigest()
    return md5
bv = get_md5("5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36")

sign是四个字符串组成后进行MD5的结果:

sign = get_md5("fanyideskweb" + context + salt + "n%A-rKaT5fb[Gy?;N5@Tj") 

这样,我们获得了所有需要用到的参数,集合在一起后发送post请求。

试一下效果:

print(translation('你好')) 

成功得到接口返回的翻译结果:

(base) F:\push\20191011>python YouDaoSpider.py
hello 

关注下方的公众号,回复 “Python有道接口“即可获得全部源代码。

文章到此就结束啦,如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python源代码 网易云音乐歌曲批量下载,免VIP,仅供测试

[download_code]

网易云音乐歌曲批量下载目前支持歌单和排名榜,只要使用正确的URL则可以使用。

更新:

  • 20180807 项目上传

要求(py脚本)

  • python3+requests+wxpython+BeautifulSoup4+lxml

文件结构:

├── dist
│   └── main.exe
├── GUI
│   └── pro-gui.fbp
├── images
│   ├── example.gif
├── README.md
├── src
│   ├── main.py

使用方法

  • 可从dist文件中直接下载main.exe使用或者直接main.py

URL获取

爬虫工具篇 – 必会用的 6 款 Chrome 插件

在日常 PC 端的爬虫过程工作中,Chrome 浏览器是我们常用的一款工具

鉴于 Chrome 浏览器的强大,Chrome 网上应用商店很多强大的插件可以帮助我们快速高效地进行数据爬虫

今天推荐的 6 款 Chrome 插件,可以大大提升我们的爬虫效率。

EditThisCookie  

EditThisCookie 是一个 Cookie 管理器,可以很方便的添加,删除,编辑,搜索,锁定和屏蔽 Cookies。

可以将登录后的 Cookies 先保存到本地,借助 cookielib ,直接爬取登录后的数据。

避免了抓包和模拟登录,帮助我们快速地进行爬虫

Web Scraper

Web Scraper 是一款免费的、适用于任何人,包含没有任何编程基础的爬虫工具

操作简单,只需要鼠标点击和简单的配置,就能快速的爬取 Web 端的数据。

它支持复杂的网站结构,数据支持文本、连接、数据块、下拉加载数据块等各种数据类型。

此外,还能将爬取的数据导出到 CSV 文件中。

Xpath Helper

Xpath Helper 是一种结构化网页元素选择器,支持列表和单节点数据获取,

它可以快速地定位网页元素。

对比 Beautiful Soup,由于 Xpath 网页元素查找性能更有优势;Xpath 相比正则表达式编写起来更方便。

编写 Xpath 之后会实时显示匹配的数目和对应的位置,方便我们判断语句是否编写正确。

Toggle JavaScript

Toggle JavaScript 插件可以用来检测当前网页哪些元素是通过 AJAX 动态加载的。

使用它可以快速在容许加载 JS 、禁止加载 JS 两种模式中切换。

User-Agent Switcher for Chrome

User-Agent Switcher for Chrome 插件可以很方便的修改浏览器的 User-Agent。

可以模拟不同的浏览器、客户端,包含 Android、IOS 去模拟请求。

对于一些特殊网站,切换 User-Agent 可以更方便地进行数据爬取。

JSON-handle

JSON-handle 是一款功能强大的JSON数据解析Chrome插件。它以简单清晰的树形图样式展现 JSON 文档,并可实时编辑。针对数据量大的场景,可以做局部选取分析。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们。有任何问题请在下方留言,我们会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python使用”先知”预测公众号未来的粉丝量

最近公众号的粉丝量一直都处于上涨状态,可喜可贺当然,作为一个上进的(摸鱼)公众号博主,当然要追求更远大的目标。我希望知道一个月后公众号的粉丝量会达到什么程度,并以此加强公众号的宣传方式。

正好,Facebook开源了一个名为“先知”(prophet)的模型,其能基于加法模型预测时间序列数据,它的非线性趋势与年、周、日的季节性以及假日效应相吻合。而且对丢失的数据和趋势的变化很健壮,通常能很好地处理异常值。

我们将根据 Python 实用宝典 最近60天的关注量变化趋势用来预测未来30天的关注量大小。

1. 安装fbprophet

现在,就让我们来试一下吧!首先是安装fbprophet, 这里的前提是大家都安装好了Python, 如果没有的话推荐看:python超详细安装指南,如果你按照官方的教程来进行安装, 你会发现TM啥也安装不上

第一步,我们需要安装fbprophet的依赖PyStan:

pip install pystan

第二步,使用conda命令安装(需要安装anaconda, 搜anaconda官网安装即可):

conda install -c conda-forge fbprophet
pip install fbprophet

2.导出公众号数据

这时候就要用F12大法了,在当前用户分析页空白处右键—检查,或者直接按F12打开开发者工具

然后选择最近两个月的数据,找到useranalysis的数据包,点开来就会找到我们需要的数据,把这一片json数据保存下来存为data.json文件即可,如下图所示。

3.处理数据

加载json数据:

import json

f = open('./data.json', 'r', encoding='utf-8')
json_data = json.load(f)
f.close()

print(json_data)

现在需要将日期和其对应的总粉丝数提取出来为一个pandas的dataframe. 如果你还没有安装 pandas,请在cmd/Terminal输入 pip install pandas 即可安装成功。

import pandas as pd
# 将日期和其对应的总粉丝数提取出来为一个pandas的dataframe
list_number = json_data['category_list'][0]['list']
df = pd.DataFrame(list_number)
print(df)

效果:

看得出来dataframe有点像字典和列表的集合,接下来就要开始进行预测了!

4.预测未来30天的数据

接下来需要生成prophet对象,调用预测函数,预测未来30天的数据变化:

from fbprophet import Prophet

# prophet内部需要将日期列设为ds,预测的值设为y
df.rename(columns={'date':'ds', 'cumulate_user':'y'}, inplace=True)

print(df)

# 调用"先知"生成对象
m = Prophet()

# 使用"先知对象"进行预测
m.fit(df)

# 获得未来30天的数据
future = m.make_future_dataframe(periods=30)

forecast = m.predict(future)
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())  

效果如下:

让我们来看看效果,表格中的yhat指的是预测的平均值,yhat_lower是预测的最小值,yhat_upper是预测的最大值。根据“先知”的预测,在未来30天内我们的粉丝量将会增加到529名粉丝,也就是说将增加16%。这个预测的值其实相对客观,我们一个月后就可以看看效果如何了。

关注下方的公众号,回复 ” 粉丝预测“即可获得全部源代码及数据。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 超简单爬取新浪微博数据 (高级版)

新浪微博的数据可是非常有价值的,你可以拿来数据分析、拿来做网站、甚至是*****。不过很多人由于技术限制,想要使用的时候只能使用复制粘贴这样的笨方法。没关系,现在就教大家如何批量爬取微博的数据,大大加快数据迁移速度!

我们使用到的是第三方作者开发的爬虫weiboSpider(有工具当然要用工具啦)。这里默认大家已经装好了Python,如果没有的话可以看我们之前的文章:Python详细安装指南

1. 下载项目

进入下方的网址,点击Download ZIP下载项目文件

https://github.com/dataabc/weiboSpider

或者

你有git的话可以在cmd/terminal中输入以下命令安装​

git clone https://github.com/dataabc/weiboSpider.git 

​2.安装依赖

将该项目压缩包解压后,打开你的cmd/Termianl进入该项目目录,输入以下命令:

pip install -r requirements.txt

便会开始安装项目依赖,等待其安装完成即可。

3.设置cookie

打开weibospider文件夹下的weibospider.py文件,将”your cookie”替换成爬虫微博的cookie,具体替换位置大约在weibospider.py文件的22行左右。cookie获取方法:

3.1 登录微博

3.2 按F12键或者右键页面空白处—检查,打开开发者工具

3.3 选择network — 按F5刷新一下 — 选择第一个文件 — 在右边窗口找到cookie

然后替换大约在weibospider.py文件的22行左右的cookie,如图所示:

替换前:

替换后:

4.设置要爬的用户user_id

4.1 获取user_id

点开你希望爬取的用户主页,然后查看此时的url:

你会发现有一串数字在链接中,这个就是我们要用到的userID, 复制即可。

4.2 设置要爬取的user_id

打开config.json文件,你会看到如下内容:

{
    "user_id_list": ["1669879400"],
    "filter": 1,
    "since_date": "2018-01-01",
    "write_mode": ["csv", "txt"],
    "pic_download": 1,
    "video_download": 1,
    "cookie": "your cookie",
    "mysql_config": {
        "host": "localhost",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "charset": "utf8mb4"
    }
}

下面讲解每个参数的含义与设置方法。

设置user_id_list
user_id_list是我们要爬取的微博的id,可以是一个,也可以是多个,例如:

"user_id_list": ["1223178222", "1669879400", "1729370543"],

上述代码代表我们要连续爬取user_id分别为“1223178222”、 “1669879400”、 “1729370543”的三个用户的微博。

user_id_list的值也可以是文件路径,我们可以把要爬的所有微博用户的user_id都写到txt文件里,然后把文件的位置路径赋值给user_id_list。

在txt文件中,每个user_id占一行,也可以在user_id后面加注释(可选),如用户昵称等信息,user_id和注释之间必需要有空格,文件名任意,类型为txt,位置位于本程序的同目录下,文件内容示例如下:

1223178222 胡歌
1669879400 迪丽热巴
1729370543 郭碧婷

假如文件叫user_id_list.txt,则user_id_list设置代码为:

"user_id_list": "user_id_list.txt",

如果有需要还可以设置Mysql数据和MongoDB数据写入,如果不设置的话就默认写入到txt和csv文件中。

5. 运行爬虫

打开cmd/terminal 进入该项目目录,输入:

python weibospider.py

即可开始爬取数据了,怎么样,是不是超级方便?而且你还可以自定义爬取的信息,比如微博的起始时间、是否写入数据,甚至能在它代码的基础上增加新的功能!(比如加个cookie池或者代理池之类的)

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

python Dis模块进行代码性能分析

​Python代码在执行的时候,会被编译为Python字节码,再由Python虚拟机执行Python字节码。有时候就我们执行python文件的时候会生成一个pyc文件,这个pyc文件即用于存储Python字节码指令,而这些字节码是一种类似于汇编指令的中间语言,但是每个字节码对应的不是机器指令,而是一段C代码。

而Dis模块,就是用于查看这些字节码的运行轨迹,因此我们可以用Dis模块判断两个函数的内存占用谁会更大,谁会更消耗CPU性能,不仅如此,通过指令,我们还可以知道Python中一些内置函数、变量的取值过程、运行逻辑,对于我们代码性能并优化代码很有帮助。

下面将通过两个例子,来介绍Dis模块的使用。

1.为什么下面第一个函数比第二个函数耗得内存更少?

def test1(a):
    if 0 < a and a < 1:
        return 1
    return 0

def test2(a):
    if 0 < a < 1:
        return 1
    return 0

一般人是比较难直接看出来的,但是我们使用Dis模块却能很容易找到答案:

import dis
def test1(a):
    if 0 < a and a < 1:
        return 1
    return 0


def test2(a):
    if 0 < a < 1:
        return 1
    return 0

dis.dis(test1)
print('*'*50)
dis.dis(test2)

结果:

dis结果

Dis的结果其实很容易阅读:

第一列:对应的源代码行数。
第二列:对应的内存字节码的索引位置。
在第一列和第二列之间的 >> 号表示跳转的目标
第三列:内部机器代码的操作。
第四列:指令参数。
第五列:实际参数。

两个函数的dis分析用*号隔开了,大家可以清晰地看到两个函数之间的语句区别。第二个函数的字节码索引最大到了30,而第一个函数的字节码索引最大仅到了22,因此,第一个函数耗得内存比第二个函数少。

而且,在第一列和第二列之间的 >> 号表示跳转的目标,大家可以看第二个函数第四列的 18,表示其跳转到了索引为18的指令,也就是ROT_TWO。第二个函数的跳转也比第一个函数多,这也可能导致其在某种特殊情况下的效率可能会比第一个函数低。

2.为什么Python2中,while True 比 while 1慢?

while 1:
    pass
 
while True:
    pass

可以通过在命令中使用dis进行分析:

可以看到,while 1 在第二行是直接JUMP_ABSOLUTE,因此相比于While True 少了LOAD_NAME 和 POP_JUMP_IF_FALSE。这是因为True在Python2中不是一个关键字,而是一个内置变量,因此每次Python都会用LOAD_NAME去检查(POP_JUMP_IF_FALSE)True的值。这就是为什么While True 比while 1慢的原因。

到了Python3,True变成了关键字,就没有这个问题了:

Python 3 针对 Python 2 做了非常多的替换,这也是为什么它不兼容 Python 2 的原因之一,差别太大了。因此,建议各位初学者直接上手 Python 3 进行学习,而非 Python 2.

希望以上两个Dis模块的使用例子能给大家带来一点灵感,分析一段Python代码的深层次性能问题虽然比较费时费力,但是一旦你分析到了深层次的性能原因,将能累积不少深层次的技术上的知识,写出更漂亮的代码。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python使用“漫威API”探索漫威宇宙

在看漫威系列电影的时候,你是不是经常会对一些角色感到好奇,想知道每个角色的关联关系和出场的事件,但是却无从下手?

现在,我们有很好的来帮助我们实现这些想法了!Marvel Comics API 允许各地的开发人员访问漫威70年来庞大的漫画信息。接下来就来告诉大家怎么使用这个漫威

1.注册账号获得API访问权限

访问下面的链接注册一个漫威开发者

https://developer.marvel.com/signup

跟着步骤走,接受它的使用条款后就能得到public key(公钥)和 private key(私钥)了:

2.pip安装相应的第三方工具

在pip中输入以下命令安装marvel包(默认你已经安装好了python和pip哦,如果你还没有安装,建议阅读这个教程:python安装)

pip install marvel

这个包是这个漫威API的封装器,里面封装了许多查询工程,方便我们使用,我们不需要理解怎么发送post请求向漫威api调用数据,仅仅使用一个语句,将我们刚刚获得的公钥和私钥传入进去,就可以拿到数据。

公钥秘钥示例

获取所有角色:

import marvel
PUBLIC_KEY = '你的公钥'
PRIVATE_KEY = '你的私钥'
m = marvel.Marvel(PUBLIC_KEY, PRIVATE_KEY)
characters = m.characters
all_characters = characters.all()
print(all_characters)

获取单个角色:

import marvel
PUBLIC_KEY = '你的公钥'
PRIVATE_KEY = '你的私钥'
m = marvel.Marvel(PUBLIC_KEY, PRIVATE_KEY)
characters = m.characters
character = characters.get(1011334)
print(character)

获取一些角色的漫画:

import marvel
PUBLIC_KEY = '你的公钥'
PRIVATE_KEY = '你的私钥'
m = marvel.Marvel(PUBLIC_KEY, PRIVATE_KEY)
characters = m.characters
comics = characters.comics(1011334)
print(comics)

同样,您可以将相同的逻辑应用于不同的对象,例如:

import marvel
PUBLIC_KEY = '你的公钥'
PRIVATE_KEY = '你的私钥'
m = marvel.Marvel(PUBLIC_KEY, PRIVATE_KEY)
stories = m.stories
all_stores = stories.all()
story = stories.get(id)
events = stories.events(id)
print(stories, all_stores, story, events)

最后,每个对象具有的子资源如下:

  • 人物
    • allgetcomicseventsseriesstories
  • 漫画
    • allgetcharacterscreatorseventsstories
  • 创作者
    • allgetcomicseventsseriesstories
  • 活动
    • allgetcharacterscomicscreatorsseriesstories
  • 系列
    • allgetcharacterscomicscreatorseventsstories
  • 故事
    • allgetcharacterscomicscreatorseventsseries

3. 使用API找到雷神出现过的漫画

想要使用API查找灭霸出现过的所有漫画,你就得先知道雷神的角色ID(character ID), 我们通过角色名字得到角色对应的ID:

import marvel
PUBLIC_KEY = '你的公钥'
PRIVATE_KEY = '你的私钥'
m = marvel.Marvel(PUBLIC_KEY, PRIVATE_KEY)
characters = m.characters
def get_hero_id(characters, name):
    all_characters = characters.all(nameStartsWith=name)
    # 根据名字获得角色信息,仅支持英文
    ids = [i['id'] for i in all_characters['data']['results']]
    names = [i['name'] for i in all_characters['data']['results']]
    return ids,names
ids, names = get_hero_id(characters, 'thor')

结果:

(base) ckenddeMacBook-Pro:20190925 ckend$ python 1.py
[1009664, 1017576, 1017106, 1017315, 1017328, 1017302, 1011025, 1010820] ['Thor', 'Thor (Goddess of Thunder)', 'Thor (MAA)', 'Thor (Marvel Heroes)', 'Thor (Marvel War of Heroes)', 'Thor (Marvel: Avengers Alliance)', 'Thor (Ultimate)', 'Thor Girl']

可以看到我们好像得到了不同系列下的雷神,以1009664为例,获得雷神出现过的漫画。

import marvel
PUBLIC_KEY = '你的公钥'
PRIVATE_KEY = '你的私钥'
m = marvel.Marvel(PUBLIC_KEY, PRIVATE_KEY)
characters = m.characters
def get_hero_id(characters, name):
    all_characters = characters.all(nameStartsWith=name)
    # 根据名字获得角色信息,仅支持英文
    ids = [i['id'] for i in all_characters['data']['results']]
    names = [i['name'] for i in all_characters['data']['results']]
    return ids,names
ids, names = get_hero_id(characters, 'thor')
comics = characters.comics(ids[0])
# ids[0]即1009664
print([i['title'] for i in comics['data']['results']])

结果如下:

(base) ckenddeMacBook-Pro:20190925 ckend$ python 1.py
 ['THOR VOL. 2: ROAD TO WAR OF THE REALMS TPB (Trade Paperback)', 'Marvel Masterworks: The Mighty Thor Vol. 18 (Hardcover)', 'King Thor (2019) #1', 'Thor Epic Collection: The Black Galaxy (Trade Paperback)', 'Thor (2018) #16', 'THOR & LOKI: BLOOD BROTHERS GALLERY EDITION HC (Hardcover)', 'Thor Of The Realms (Trade Paperback)', 'War Of The Realms Omega (2019) #1', 'Thor (2018) #15', 'The Unbeatable Squirrel Girl (2015) #46', 'Kirby Is… Mighty! King-Size (Hardcover)', 'Thor (2018) #14', 'War of the Realms (2019) #5', 'MARVEL ACTION CLASSICS: SPIDER-MAN TWO-IN-ONE 1 (2019) #1', 'Thor (2018) #13', 'Moon Girl and Devil Dinosaur (2015) #43', "Decades: Marvel in The '80s - Awesome Evolutions (Trade Paperback)", 'War of the Realms (2019) #3', 'The Art of War of the Realms (Trade Paperback)', 'Mighty Thor 3D (2019) #1']

可以看到,雷神一共在十九部作品里出现过哦。怎么样,是不是特别方便的工具

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

利用Python找出适合你的国考市考公务员岗位

2020年国考已经临近啦,很多小伙伴都在考虑是否要报公务员,但是却不知道适合自己的岗位有什么,今天我们就来利用Python找出适合你的岗位吧!

根据2019年国考全国职位表,可以找到以下的报考限制因素:专业、学历、政治面貌、基层工作年限。该表的下载地址:

由于表格是Excel的xlsx格式,我们需要用到两个包,xlrd和xlwt,使用pip安装即可,如果你还没有安装Python和pip,请看这篇教程:安装Python. 在CMD/TERMINAL输入以下两条命令进行安装:

pip install xlrd
pip install xlwt

假设,假设我们是计算机本科专业,而且没有任何的基层工作经验,以这样的条件筛选表格中适合我们的岗位,(如果你没有耐心看,可以到网站上下载源代码直接用哦):

我们会使用xlrd读取表格,然后用xlwt保存筛选出来的数据,首先是xlrd读取:

data = xlrd.open_workbook(file) 
# 将表格数据读取到data中

然后我们需要一个变量保存筛选数据:

output = xlwt.Workbook(encoding='utf-8')

该表格中还有许多子表格,因此我们需要遍历所有的子表格:

for sheet in data.sheets():
    output_sheet = output.add_sheet(sheet.name)
    # 筛选出来的文件中也添加这些子表格

添加第二行的列信息:

for col in range(sheet.ncols):
    # 添加第二行的列信息
    output_sheet.row(0).write(col, sheet.cell(1,col).value)

接下来是检测文件中的每一行,判断其是否能够满足我们的三个条件:专业、学历、基层限制,由于不好分批展示,这里直接给出全部源代码,大家看注释就应该能看明白了,是一个使用关键词匹配对应表格的方法:

# 完整源代码
# Python实用宝典 2019-09-23
#-*- coding: utf-8 -*-

import xlrd
import xlwt
import re

# 检查是否满足报考条件
def check(row_value, major, edu, year):
    ma = row_value[12]
    # 该岗位所需专业
    ed = row_value[13]
    # 该岗位所需学历
    value = row_value[16]
    # 该岗位所需年限
    if check_major(ma, major) and check_edu(ed, edu) and checkSpecial(value, year):
        return True
    else:
        return False

def check_major(value, major):
    # 检查是否满足专业要求
    pat = re.compile(major)
    if re.search(pat, value):
        return True
    return False

# 检查是否满足学历要求
def check_edu(value, edu):
    pat = re.compile(edu)
    if re.search(pat, value):
        return True
    return False

# 检查基层年限设置
def checkSpecial(value, year):
    pat = re.compile(year)
    if re.search(pat, value):
        return True
    return False

# 根据条件筛选出职位
def filterTitle(file, major, edu, year):
    data = xlrd.open_workbook(file)
    # 将表格数据读取到data中
    output = xlwt.Workbook(encoding='utf-8')
    for sheet in data.sheets():
        output_sheet = output.add_sheet(sheet.name)
        # 筛选出来的文件中也添加这些子表格
        for col in range(sheet.ncols):
            # 添加第二行的列信息
            output_sheet.row(0).write(col, sheet.cell(1,col).value)

        output_row = 1
        for row in range(sheet.nrows):
            # 每一行都检测
            row_value = sheet.row_values(row)

            choosed = check(row_value, major, edu, year)
            # 是否满足三个条件(专业、学历、基层限制)

            if choosed == True:
                # 满足则输出到文件中
                for col in range(sheet.ncols):
                    output_sheet.row(output_row).write(col, sheet.cell(row, col).value)
                output_sheet.flush_row_data()
                output_row += 1
    output.save('output.xls')

if __name__ == '__main__':
    filterTitle('1.xlsx', u'不限|计算机', u'本科', u'无限制')

运行完毕后能在本地找到一个output.xls的文件,里面就是我们筛选出来的所有岗位,可以看到本科计算机能报中央国家党群机关和本级中央行政机关的的岗位比较少,但是国家行政机关省级以下直属岗位非常多,高达901个。事业单位355个。

大家也可以再修改源代码添加城市限制,比如说你希望在广东省工作,那就可以把check函数改成这样:

def check(row_value, major, edu, year, location):
    ma = row_value[12]
    # 该岗位所需专业
    ed = row_value[13]
    # 该岗位所需学历
    value = row_value[16]
    # 该岗位所需年限
    loc= row_value[1]
    # 该岗位位置
    if check_re(ma, major) and check_re(ed, edu) and check_re(value, year) and check_re(loc , location):
        return True
    else:
        return False

然后查看原表格里第二列的值,你会发现大部分国家公务员都是以省为单位的,比如XX广东省科员,那么调用该函数的时候就加一个’广东’参数即可。

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典