Python学习记录(八):命令行参数&网络爬虫
PyxYuYu opened this issue · comments
No pressure, no diamonds.
0x01 Wooyun
- 弱口令
- weblogic/weblogic
- tomcat/tomcat
0x02 爬虫实战一
- 命令行参数
sys
模块--系统相关的参数和函数sys.argv
传递给python
脚本的命令行参数列表argv[0]
是脚本的名称(是否是完整的路径名取决于操作系统),如果执行命令时解释器使用了-c
命令行选项,argv[0]
设置为字符串-c
,如果无脚本名称传递给python
解释器,argv[0]
是空字符串
argument
命令行上的字符串,在python
中参数是sys.argV[1:]
,arg[0]是执行程序的名字option
选项option argument
选项的值,跟在选项后面,格式如-f foo/-ffoo
,-file foo/--file=foo
posititon argument
位置参数,选项被处理后剩下的参数
argparse
模块--命令行解析(类似的模块有getopt
)argparse
模块使得编写用户友好的命令行接口飞车容易,程序只需定义好它要求的参数,然后argparse
将负责如何从sys.argv
中解析出这些参数,argparse
模块还会自动生成帮助和使用信息并且当用户赋给程序非法的参数时产生的错误信息- 创建一个解析器
argparse.ArgumentParser()
ArgumentParser
对象会保存把命令行解析成Python
数据类型所需要的所有信息
- 添加参数 add_argument()方法向
ArgumentParser
添加程序的参数信息,这些信息告诉ArgumentParser
如何接受命令行上的字符串并将他们转换成对象,这些信息被保存下来并在调用parse_args()
时用到 - 解析参数 通过parse_args()方法解析,它将检查命令行,把每个参数转换成恰当的类型并采取恰当的动作,在大部分情况下,这意味着将从命令行解析出来的属性建立一个简单的
Namespace
对象- 在脚本中,
parse_args()
调用一般不带参数,ArgumentParser
将根据sys.argv
自动确定命令行参数
- 在脚本中,
ArgumentParser
对象
class argparse.ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)
ArgumentParser
对象,所有的参数应该以关键字参数传递prog
程序的名字(默认:sys.argv[0]
)usage
描述程序用户的字符串(默认:从解析器的参数生成)description
参数帮助信息之前的文本(默认:空)epilog
参数帮助信息之后的文本 (默认:空)parents
ArgumentParser
对象的一个列表,这些对象的参数应该包括进去formatter_class
定制化帮助信息的类prefix_chars
可选参数的前缀字符集(默认:'-')fromfile_prefix_chars
额外的参数应该读取的文件的前缀字符集(默认:None)argument_default
参数的全局默认值(默认:None)conflict_handler
解决冲突的可选参数的策略(通常没有必要)add_help
给解析器添加-h/-help
选项(默认:True)
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
name or flags
选项字符串的名字或列表,例如-foo
或者-f
,--foo
action
在命令行遇到该参数时采取的基本动作类型,参数出发的动作
store
保存参数,默认store_const
保存一个被定义为参数规格一部分的值(常量),而不是一个来自参数解析而来的值store_ture/store_false
保存相应的布尔值append
将值保存在一个列表中append_const
将一个定义在参数规格中的值(常量)保存在一个列表中count
参数出现的次数version
打印程序版本信息nargs
应该读取的命令行参数数目const
某些action
和nargs
选项要求的常数值default
如果命令行中没有出现该参数时的默认值,参数的默认值type
命令行参数应该被转换成的类型,把命令行输入的结果转换成设置的类型choices
参数可允许的值是一个容器required
该命令行选项是可以省略(只针对可选参数)help
参数的简短描述metavar
参数在帮助信息的名字dest
给parse_args()
返回的对象要添加的属性名称
- 如果
dest=a
,那么可以通过args.a
访问该参数
ArgumentParser.parse_args(args=None, namespace=None)
- 将参数字符串转换成对象并设置成命名空间的属性,返回构成的命名空间
- 之前对
add_argument()
的调用完全决定了创建什么对象以及如何设置- 默认情况下,参数字符串取自于
sys.argv
,并创建一个空的Namespace
对象用于保存属性
from argparse import ArgumentParser
# 创建解析对象
# description: 参数帮助信息之前的描述程序
# add_help: 默认是True,False就是禁用-h/-help
parser = ArgumentParser(usage="This is Pyx.", description="This is a example program.")
# 指定程序需要接受的命令参数
# 定位参数,执行程序时必选,否则会报错
parser.add_argument('echo', help='echo the string')
# 可选参数,可选
parser.add_argument('--verbosity', help='increase output verbosity')
parser.add_argument('--one', default=1, type=int, help="the first argument")
parser.add_argument('--two', dest='aa', type=int, help="the second argument")
parser.add_argument('--docs-dir', default="./", help="document directory")
# 将可以识别和不可以识别的的命令参数放入
# args, remaining = parser.parser_known_args(args=None, namespace=None)
args = parser.parse_args()
print args
print args.one
# 如果已经添加了`dest`的话,那么就用后面带aa的作为对象属性
print args.aa
print args.echo
运行返回:
python argparse.py pyx --verbosity s --one 5
Namespace(aa=None, doce_dir='./', echo='pyx', one=5, verbosity='s')
5
None
pyx
- 如果上面的函数遇到了没有识别的命令行参数,会报错,那么只提取有用的参数,忽略不认识的参数不需要报错,需要添加
args, remaining = parser.parse_known_args(sys.argv)
ArgumentParser.parse_known_args(args=None, namespace=None)
返回一个两个元素的元组,包含构造的namespace
和剩余的不认识的参数字符串的列表- 上面的2个变量刚刚好一个放
namespace
,一个放不认识的参数列表
0x03 一天总结
- 命令行参数有多个模块可以使用,常用的是
argparse
模块argparse.ArgumentParser()
创建命令解析对象ArgumentParser.add_argument()
添加命令参数ArgumentParser.parse_known_args()
忽略输入错误的参数,一般情况不用,让它报错提示
- 爬虫实战一 到这里也告一段落了基本实现了多线程,带命令行
- 不过命令行还不是很完整,还可以添加判断,完善命令行命令
- 由于今天(2016年3月9日 21:34:14)
BeeBeeto
的网址也导向了Seebug
,估计以后都不会有了(幸好所有公开POC
已经全部爬完),所以爬虫实战一到今天就全部结束 - 明天开始挑战知道创宇的
Python
招聘题目