test.py脚本
#!/usr/bin/python3
import sys
print ('参数个数为:', len(sys.argv), '个参数。')
print ('参数列表:', str(sys.argv))
print ('脚本名:', str(sys.argv[0]))
print ('第一个参数:', sys.argv[1])
执行python3 test.py arg1 arg2 arg3
参数个数为: 4 个参数。
参数列表: ['test.py', 'arg1', 'arg2', 'arg3']
脚本名: test.py
第一个参数: arg1
test.py脚本
#!/usr/bin/python3
import argparse
# 生成了一个命令行参数的对象
parser = argparse.ArgumentParser(description='Test for argparse')
parser.add_argument('--name', '-n', help='name属性,非必要参数')
parser.add_argument('--year', '-y', help='year 属性,非必要参数,但有默认值', default=2017)
parser.add_argument('--body', '-b', help='body属性,必要参数', required=True)
args = parser.parse_args()
print (args.year, args.name, args.body)
查看帮助python3 test.py --help
usage: test.py [-h] [--name NAME] [--year YEAR] --body BODY
Test for argparse
optional arguments:
-h, --help show this help message and exit
--name或-n NAME name属性,非必要参数
--year或-y YEAR year属性,非必要参数,但有默认值
--body或-b BODY body 属性,必要参数
执行python3 test.py --year 2021 -n robot --body "are you ok?"
2021 robot are you ok?
以方法2中的test.py脚本为例
python3 test.py --year 2021 --body [\"test\", \"robot\",\"boy\" ]
2021 ["test", "robot", "boy" ]
以方法1中的test.py脚本为例
python3 test.py [\"test\", \"robot\",\"boy\" ]
参数个数为: 2个参数。
参数列表: ['test.py', '[\"test\", \"robot\", \"boy\" ]']
脚本名: test.py
第一个参数: ["test", "robot", "boy" ]
其实此时传入的第一个参数是一个字符,需要转换为列表。
import json
json.loads(sys.argv[1])
test_arg.py脚本
#!/usr/bin/python3
import argparse
import os
# 生成了一个命令行参数的对象
parser = argparse.ArgumentParser(description='Test for argparse')
parser.add_argument('--body', '-b', help='body属性,必要参数', required=True)
args = parser.parse_args()
print (args.body)
command=python3 + ' ' + test_sys.py+ ' ' + args.body
print (command)
str=('command')
result=os.system(str)
test_sys.py脚本
#!/usr/bin/python3
import sys
import json
print ('第一个参数:', sys.argv[1])
print ('列表:', json.loads(sys.argv[1]))
执行python3 test_arg.py --body [\"test\", \"robot\",\"boy\" ]
python3 test_sys.py ["test", "robot", "boy" ]
test_sys.py执行报错,转json失败。
还记得我们案例2中,脚本的传入指定参数和实际传入参数嘛?
test_arg.py脚本我们稍微优化下,在传参前先字符替换下。
["test", "robot", "boy" ]转换为[\"test\", \"robot\",\"boy\" ]即可。
command.replace(' " ' , r ' \" ') 添加到command=之后,再次运行看看呢?
本书从Python的安装开始,详细讲解了Python从简单程序延伸到Python网络爬虫的全过程。本书从实战出发,根据不同的需求选取不同的爬虫,有针对性地讲解了几种Python网络爬虫。本书共8章,涵盖的内容有Python语言的基本语法、Python常用IDE的使用、Python第三方模块的导入使用、Python爬虫常用模块、Scrapy爬虫、Beautiful
Soup爬虫、Mechanize模拟浏览器和Selenium模拟浏览器。本书所有源代码已上传网盘供读者下载。本书内容丰富,实例典型,实用性强。适合Python网络爬虫初学者、数据分析与挖掘技术初学者,以及高校及培训学校相关专业的师生阅读。
有一半是讲解python基础的,与爬虫无关。后面把流行的包或框架都讲到了,对初学者还是很不错的本书。
年前学习python基础知识之后,在好奇心的推动下,我开始接触了python网络爬虫,而在刚开始接触网络爬虫时,繁多的资料让我猝不及防,对于习惯于优先通过书籍进行自主学习的我来说,通过长期看视频学习反而不是很习惯,但是在网络上找到的许多爬虫相关资料,不是说的过于简略,就是部分内容有些“过时”。该跟谁走?该怎么走?这个问题那段时间一直困扰着我。
所幸,在热心群友的推荐下(haha,真的很热心的一个老哥),我入手了崔大写的《Python3网络爬虫开发实战(第二版)》,找到了符合我状况的“引路书”。
初入手,书籍就令我惊讶,920页左右的厚度,在我之前买过的相关书籍中,厚度也能算是前几名,比实际想象的厚许多。
而当我翻开目录,可以发现,与学科领域的“大部头”专著相比(读过几本,看那种书真的蛮痛苦的hh),这本书的结构层次分明,由浅入深、层层递进,由爬虫基础引入,再向各方面延伸,刚好满足了我“半个小白”状态的学习需要(经过近2个月的学习感觉也确实真的适合我)。
而在书的内容之外,不得不提的是,崔大的Scrape平台。崔大的Scrape平台合理的解决了爬虫入门者实战训练的“场地”问题,防止了初步入门者无知的迈入了著作权的“灰色地带”,这种提供练习平台的爬虫教学,确实也我第一次遇到的,我对崔大的用心感到真心佩服。
简要的介绍到这里就结束了!目前我已经跟随崔大的这本书学习了两个月,受益匪浅,掌握了蛮多的技能。
总之,如果想跟随较新的爬虫教程学习,基础跟我相似的同学,我认为崔大的《Python3网络爬虫开发实战(第二版)》是入门爬虫绝不容错过的一本书!