Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_python
提交
a989f68b
S
skill_tree_python
项目概览
CSDN 技术社区
/
skill_tree_python
通知
66
Star
14
Fork
6
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_python
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a989f68b
编写于
12月 17, 2021
作者:
F
feilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加网络爬虫题目
上级
fc23aaab
变更
31
隐藏空白更改
内联
并排
Showing
31 changed file
with
223 addition
and
152 deletion
+223
-152
data/1.python初阶/1.预备知识/1.Python简介/helloworld.json
data/1.python初阶/1.预备知识/1.Python简介/helloworld.json
+3
-1
data/1.python初阶/1.预备知识/2.程序设计思想/class.json
data/1.python初阶/1.预备知识/2.程序设计思想/class.json
+7
-5
data/1.python初阶/1.预备知识/2.程序设计思想/function.json
data/1.python初阶/1.预备知识/2.程序设计思想/function.json
+7
-5
data/1.python初阶/1.预备知识/2.程序设计思想/process.json
data/1.python初阶/1.预备知识/2.程序设计思想/process.json
+7
-5
data/1.python初阶/1.预备知识/3.安装Python/install.json
data/1.python初阶/1.预备知识/3.安装Python/install.json
+7
-5
data/1.python初阶/1.预备知识/4.运行方式/run.json
data/1.python初阶/1.预备知识/4.运行方式/run.json
+7
-5
data/1.python初阶/1.预备知识/5.常用开发工具/ide.json
data/1.python初阶/1.预备知识/5.常用开发工具/ide.json
+7
-5
data/1.python初阶/1.预备知识/6.编码规范/style.json
data/1.python初阶/1.预备知识/6.编码规范/style.json
+7
-5
data/1.python初阶/1.预备知识/7.模块管理/import_lib.json
data/1.python初阶/1.预备知识/7.模块管理/import_lib.json
+7
-5
data/1.python初阶/1.预备知识/7.模块管理/import_other_module.json
data/1.python初阶/1.预备知识/7.模块管理/import_other_module.json
+7
-5
data/1.python初阶/1.预备知识/7.模块管理/import_relative.json
data/1.python初阶/1.预备知识/7.模块管理/import_relative.json
+7
-5
data/1.python初阶/2.基础语法/1.缩进规则/step.json
data/1.python初阶/2.基础语法/1.缩进规则/step.json
+7
-5
data/1.python初阶/2.基础语法/3.函数/call.json
data/1.python初阶/2.基础语法/3.函数/call.json
+7
-5
data/1.python初阶/2.基础语法/3.函数/fact1.json
data/1.python初阶/2.基础语法/3.函数/fact1.json
+7
-5
data/1.python初阶/2.基础语法/3.函数/fact2.json
data/1.python初阶/2.基础语法/3.函数/fact2.json
+7
-5
data/1.python初阶/2.基础语法/3.函数/fibonacci1.json
data/1.python初阶/2.基础语法/3.函数/fibonacci1.json
+7
-5
data/1.python初阶/2.基础语法/3.函数/fibonacci2.json
data/1.python初阶/2.基础语法/3.函数/fibonacci2.json
+7
-5
data/1.python初阶/2.基础语法/3.函数/helloworld2.json
data/1.python初阶/2.基础语法/3.函数/helloworld2.json
+7
-5
data/1.python初阶/2.基础语法/4.类/hash_key_value_set.json
data/1.python初阶/2.基础语法/4.类/hash_key_value_set.json
+9
-7
data/1.python初阶/2.基础语法/4.类/hash_key_value_set_by_compose.json
.../1.python初阶/2.基础语法/4.类/hash_key_value_set_by_compose.json
+9
-7
data/1.python初阶/2.基础语法/4.类/key_value_set.json
data/1.python初阶/2.基础语法/4.类/key_value_set.json
+7
-5
data/1.python初阶/2.基础语法/5.顺序语句结构/calc.json
data/1.python初阶/2.基础语法/5.顺序语句结构/calc.json
+4
-1
data/1.python初阶/3.进阶语法/1.列表推导式/iter.json
data/1.python初阶/3.进阶语法/1.列表推导式/iter.json
+8
-6
data/2.python中阶/3.网络爬虫/10.动态渲染页面爬取/dynamic_page.json
data/2.python中阶/3.网络爬虫/10.动态渲染页面爬取/dynamic_page.json
+7
-4
data/2.python中阶/3.网络爬虫/11.模拟登录/simulate_login.json
data/2.python中阶/3.网络爬虫/11.模拟登录/simulate_login.json
+8
-5
data/2.python中阶/3.网络爬虫/6.Selenium/selenium.json
data/2.python中阶/3.网络爬虫/6.Selenium/selenium.json
+8
-5
data/2.python中阶/3.网络爬虫/8.pyspider框架的使用/pyspider.json
data/2.python中阶/3.网络爬虫/8.pyspider框架的使用/pyspider.json
+8
-5
data/2.python中阶/3.网络爬虫/9.验证码处理/verification_code.json
data/2.python中阶/3.网络爬虫/9.验证码处理/verification_code.json
+8
-5
data/3.python高阶/2.结构化数据分析工具Pandas/3.基本操作/loc.json
data/3.python高阶/2.结构化数据分析工具Pandas/3.基本操作/loc.json
+7
-5
data/3.python高阶/2.结构化数据分析工具Pandas/4.高级应用/stat.json
data/3.python高阶/2.结构化数据分析工具Pandas/4.高级应用/stat.json
+7
-5
src/tree.py
src/tree.py
+11
-6
未找到文件。
data/1.python初阶/1.预备知识/1.Python简介/helloworld.json
浏览文件 @
a989f68b
...
...
@@ -3,5 +3,6 @@
"author"
:
"huanhuilong"
,
"source"
:
"helloworld.md"
,
"depends"
:
[],
"type"
:
"code_options"
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/2.程序设计思想/class.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"class.md"
,
"depends"
:
[],
"exercise_id"
:
26
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"class.md"
,
"depends"
:
[],
"exercise_id"
:
26
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/2.程序设计思想/function.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"function.md"
,
"depends"
:
[],
"exercise_id"
:
28
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"function.md"
,
"depends"
:
[],
"exercise_id"
:
28
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/2.程序设计思想/process.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"process.md"
,
"depends"
:
[],
"exercise_id"
:
27
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"process.md"
,
"depends"
:
[],
"exercise_id"
:
27
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/3.安装Python/install.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"install.md"
,
"depends"
:
[],
"exercise_id"
:
31
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"install.md"
,
"depends"
:
[],
"exercise_id"
:
31
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/4.运行方式/run.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"run.md"
,
"depends"
:
[],
"exercise_id"
:
32
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"run.md"
,
"depends"
:
[],
"exercise_id"
:
32
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/5.常用开发工具/ide.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"ide.md"
,
"depends"
:
[],
"exercise_id"
:
30
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"ide.md"
,
"depends"
:
[],
"exercise_id"
:
30
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/6.编码规范/style.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"style.md"
,
"depends"
:
[],
"exercise_id"
:
29
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"style.md"
,
"depends"
:
[],
"exercise_id"
:
29
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/7.模块管理/import_lib.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"import_lib.md"
,
"depends"
:
[],
"exercise_id"
:
163
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"import_lib.md"
,
"depends"
:
[],
"exercise_id"
:
163
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/7.模块管理/import_other_module.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"import_other_module.md"
,
"depends"
:
[],
"exercise_id"
:
164
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"import_other_module.md"
,
"depends"
:
[],
"exercise_id"
:
164
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/1.预备知识/7.模块管理/import_relative.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"import_relative.md"
,
"depends"
:
[],
"exercise_id"
:
165
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"import_relative.md"
,
"depends"
:
[],
"exercise_id"
:
165
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/1.缩进规则/step.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"step.md"
,
"depends"
:
[],
"exercise_id"
:
83
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"step.md"
,
"depends"
:
[],
"exercise_id"
:
83
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/3.函数/call.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"call.md"
,
"depends"
:
[],
"exercise_id"
:
197
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"call.md"
,
"depends"
:
[],
"exercise_id"
:
197
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/3.函数/fact1.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"fact1.md"
,
"depends"
:
[],
"exercise_id"
:
190
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"fact1.md"
,
"depends"
:
[],
"exercise_id"
:
190
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/3.函数/fact2.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"fact2.md"
,
"depends"
:
[],
"exercise_id"
:
244
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"fact2.md"
,
"depends"
:
[],
"exercise_id"
:
244
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/3.函数/fibonacci1.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"fibonacci1.md"
,
"depends"
:
[],
"exercise_id"
:
201
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"fibonacci1.md"
,
"depends"
:
[],
"exercise_id"
:
201
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/3.函数/fibonacci2.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"fibonacci2.md"
,
"depends"
:
[],
"exercise_id"
:
239
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"fibonacci2.md"
,
"depends"
:
[],
"exercise_id"
:
239
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/3.函数/helloworld2.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"helloworld2.md"
,
"depends"
:
[],
"exercise_id"
:
166
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"helloworld2.md"
,
"depends"
:
[],
"exercise_id"
:
166
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/4.类/hash_key_value_set.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"hash_key_value_set.py"
,
"depends"
:
[
"key_value_set.py"
],
"exercise_id"
:
169
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"hash_key_value_set.py"
,
"depends"
:
[
"key_value_set.py"
],
"exercise_id"
:
169
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/4.类/hash_key_value_set_by_compose.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"hash_key_value_set_by_compose.py"
,
"depends"
:
[
"key_value_set.py"
],
"exercise_id"
:
168
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"hash_key_value_set_by_compose.py"
,
"depends"
:
[
"key_value_set.py"
],
"exercise_id"
:
168
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/4.类/key_value_set.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"key_value_set.md"
,
"depends"
:
[],
"exercise_id"
:
167
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"key_value_set.md"
,
"depends"
:
[],
"exercise_id"
:
167
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/1.python初阶/2.基础语法/5.顺序语句结构/calc.json
浏览文件 @
a989f68b
...
...
@@ -2,5 +2,7 @@
"source"
:
"calc.py"
,
"depends"
:
[],
"exercise_id"
:
76
,
"type"
:
"code_options"
"type"
:
"code_options"
,
"notebook_enable"
:
true
,
"author"
:
"feilong"
}
\ No newline at end of file
data/1.python初阶/3.进阶语法/1.列表推导式/iter.json
浏览文件 @
a989f68b
{
"author"
:
"HansBug"
,
"source"
:
"iter.md"
,
"depends"
:
[],
"exercise_id"
:
190
,
"type"
:
"code_options"
}
"author"
:
"HansBug"
,
"source"
:
"iter.md"
,
"depends"
:
[],
"exercise_id"
:
"4ded2d6929124ddd90f409a72eb073cc"
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/2.python中阶/3.网络爬虫/10.动态渲染页面爬取/dynamic_page.json
浏览文件 @
a989f68b
{
"author"
:
"zxm2015"
,
"source"
:
"dynamic_page.md"
,
"depends"
:
[],
"type"
:
"code_options"
"author"
:
"zxm2015"
,
"source"
:
"dynamic_page.md"
,
"depends"
:
[],
"type"
:
"code_options"
,
"exercise_id"
:
"d723ad753e0f4367932a9436f8732ec8"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/2.python中阶/3.网络爬虫/11.模拟登录/simulate_login.json
浏览文件 @
a989f68b
{
"author"
:
"zxm2015"
,
"source"
:
"simulate_login.md"
,
"depends"
:
[],
"type"
:
"code_options"
}
"author"
:
"zxm2015"
,
"source"
:
"simulate_login.md"
,
"depends"
:
[],
"type"
:
"code_options"
,
"exercise_id"
:
"b909e9d8af9c44498ffc0519d7b8be62"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/2.python中阶/3.网络爬虫/6.Selenium/selenium.json
浏览文件 @
a989f68b
{
"author"
:
"zxm2015"
,
"source"
:
"selenium.md"
,
"depends"
:
[],
"type"
:
"code_options"
}
"author"
:
"zxm2015"
,
"source"
:
"selenium.md"
,
"depends"
:
[],
"type"
:
"code_options"
,
"exercise_id"
:
"fa67f7b6cfb94d4aa5048c0748220313"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/2.python中阶/3.网络爬虫/8.pyspider框架的使用/pyspider.json
浏览文件 @
a989f68b
{
"author"
:
"zxm2015"
,
"source"
:
"pyspider.md"
,
"depends"
:
[],
"type"
:
"code_options"
}
"author"
:
"zxm2015"
,
"source"
:
"pyspider.md"
,
"depends"
:
[],
"type"
:
"code_options"
,
"exercise_id"
:
"2a356f5e71174f599bfea527cd062057"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/2.python中阶/3.网络爬虫/9.验证码处理/verification_code.json
浏览文件 @
a989f68b
{
"author"
:
"zxm2015"
,
"source"
:
"verification_code.md"
,
"depends"
:
[],
"type"
:
"code_options"
}
"author"
:
"zxm2015"
,
"source"
:
"verification_code.md"
,
"depends"
:
[],
"type"
:
"code_options"
,
"exercise_id"
:
"9ae36338010949038ac029a0396b9d10"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/3.python高阶/2.结构化数据分析工具Pandas/3.基本操作/loc.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"loc.md"
,
"depends"
:
[],
"exercise_id"
:
121
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"loc.md"
,
"depends"
:
[],
"exercise_id"
:
121
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
data/3.python高阶/2.结构化数据分析工具Pandas/4.高级应用/stat.json
浏览文件 @
a989f68b
{
"author"
:
"huanhuilong"
,
"source"
:
"stat.md"
,
"depends"
:
[],
"exercise_id"
:
125
,
"type"
:
"code_options"
"author"
:
"huanhuilong"
,
"source"
:
"stat.md"
,
"depends"
:
[],
"exercise_id"
:
125
,
"type"
:
"code_options"
,
"notebook_enable"
:
true
}
\ No newline at end of file
src/tree.py
浏览文件 @
a989f68b
...
...
@@ -16,9 +16,11 @@ handler.setFormatter(formatter)
logger
.
addHandler
(
handler
)
repo
=
git
.
Repo
(
"."
)
def
user_name
():
return
repo
.
config_reader
().
get_value
(
"user"
,
"name"
)
def
load_json
(
p
):
with
open
(
p
,
'r'
)
as
f
:
return
json
.
loads
(
f
.
read
())
...
...
@@ -100,11 +102,13 @@ class TreeWalker:
for
index
,
chapter
in
enumerate
(
level_node
[
"children"
]):
chapter_title
=
list
(
chapter
.
keys
())[
0
]
chapter_node
=
list
(
chapter
.
values
())[
0
]
chapter_path
=
os
.
path
.
join
(
level_path
,
f
"
{
index
+
1
}
.
{
chapter_title
}
"
)
chapter_path
=
os
.
path
.
join
(
level_path
,
f
"
{
index
+
1
}
.
{
chapter_title
}
"
)
self
.
load_sections
(
chapter_path
,
chapter_node
)
for
index
,
section_node
in
enumerate
(
chapter_node
[
"children"
]):
section_title
=
list
(
section_node
.
keys
())[
0
]
full_path
=
os
.
path
.
join
(
chapter_path
,
f
"
{
index
+
1
}
.
{
section_title
}
"
)
full_path
=
os
.
path
.
join
(
chapter_path
,
f
"
{
index
+
1
}
.
{
section_title
}
"
)
if
os
.
path
.
isdir
(
full_path
):
self
.
check_section_keywords
(
full_path
)
self
.
ensure_exercises
(
full_path
)
...
...
@@ -322,7 +326,8 @@ class TreeWalker:
config
[
"export"
]
=
export
if
flag
:
dump_json
(
os
.
path
.
join
(
section_path
,
"config.json"
),
config
,
True
,
True
)
dump_json
(
os
.
path
.
join
(
section_path
,
"config.json"
),
config
,
True
,
True
)
for
e
in
config
.
get
(
"export"
,
[]):
full_name
=
os
.
path
.
join
(
section_path
,
e
)
...
...
@@ -370,6 +375,6 @@ class TreeWalker:
def
check_section_keywords
(
self
,
full_path
):
config
=
self
.
ensure_section_config
(
full_path
)
if
not
config
.
get
(
"keywords"
,
[]):
self
.
logger
.
error
(
f
"节点 [
{
full_path
}
] 的关键字为空,请修改配置文件写入关键字"
)
sys
.
exit
(
1
)
#
if not config.get("keywords", []):
#
self.logger.error(f"节点 [{full_path}] 的关键字为空,请修改配置文件写入关键字")
#
sys.exit(1)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录