pyspider爬虫框架源码阅读
主要使用的组件
tornado
一个异步可并发的网络库
有4个部分组成
- Web Framework,RequestHandler
- HTTP的客户端和服务端 HTTPServer AsyncHTTPClient
- 一个异步的网络库 IOLoop IOStream
- 一个协程库 tornado.gen
flask
用于搭建web server
phantomjs
用于爬取js页面
click
用于建立一个好的命令行接口的库
1 | @click.command() |
表示这是一个子命令。
1 | @click.option |
表示一个命令行的option
1 | @click.option('--shout/--no-chout',default=False) |
表示这是一个boolean flag
1 | @click.command() |
这两个装饰器会对hash-type这个参数进行检查,如果不是
1 |
|
@click.command()
@click.option(‘–username’)
def greet(username):
click.echo(‘hello %s!’ % username)
if name==’main‘:
greet(auto_envvar_prefix=’GREETER’)
1 |
|
exportGREETERUSERNAME=john greet
hello john
1 | #### 可变参数 #### |
@click.command()
@click.argument(‘src’,nargs=-1)
@click.argument(‘dst’,nargs=1)
1 | 这样子src就拥有了可变参数的特性,可以吃掉任意多的参数。但是只能有一个可变参数存在。 |
文件安全
提供了lazy mode和atomic mode来保证文件的读写安全,lazy模式下,读文件会得到立即的反应,而写文件则会到第一次IO操作的时候才有反应。
复杂应用
上下文环境 context
当一个click命令执行的时候,一个
1 |
|
@click.pass_context
1 | 可以将上下文传输过来 |
@click.pass_obj则是只传递
Context.obj`
字段过来。
当使用了这两个装饰器之后,被装饰的函数的第一个参数就是对应的Context或Context.obj
run.py
在./pyspider/run.py
中从cli()
函数开始运行,看之前最好看一下click的使用,因为整个结构是基于click的。
lambda 匿名函数
这个是用来绑定一个匿名函数的