84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
我用python写了个爬虫脚本,怎么通过web 方式控制开始,暂停呢?
闭关修行中......
楼主的问题可以分为两部分。一是找到一种适合的 IPC(进程间通信)方式来实现控制脚本的目的,二是找一个合适的web framework来写一个好用的web UI。
一的话,IPC有很多种方式,楼上的signal/env/process都是不错的方式。我也很推荐socket,毕竟这也是非常常见的方式。library方面,我推荐Twisted或者ZeroMQ。前者提供了多种IPC方式,不过学起来略有点慢。后者提供了基于socket的IPC方式,非常灵活。 二的话,Django/bottle/web.py等等等等,随便抓一个来用就是了。
Twisted
ZeroMQ
Django
bottle
web.py
1. 你可以通过发 signal 嘛http://docs.python.org/2/library/sign... 2. 通过环境变量,通过 python 修改环境变量 ,然后在爬虫中判断标识 3. 通过 subprocess 调用脚本,关闭时杀掉进程 4. 用 scrapy 改写下,似乎是支持通过 web 去控制的。http://doc.scrapy.org/en/latest/topic...
我之前自己尝试过写过一个框架,其实也就是通过python的os.popen执行shell 在每个需要web控制脚本启动的机器上都写一个tornado的API服务,然后有一个前台页面,API可以查询指定脚本(实质是得到脚本名的参数,然后python执行shell命令——ps aux | grep 脚本名称)然后读取结果返回前台页面,然后会得到相应的进程id,再通过传递进程ID参数去执行kill操作,也可以传递命令参数,然后tornado处理。
这样做很偷懒,但是安全性不好。
最偷懒的方法,写个cgi,cgi内容是执行一段bash脚本,cgi可以用perl python php写都行
比较推荐通过变量的方式控制,变量可以是爬虫内部的,也可以是文件或者db的某个标记,爬虫一轮一轮的跑,每一次都读取一下这个变量即可。
楼主的问题可以分为两部分。一是找到一种适合的 IPC(进程间通信)方式来实现控制脚本的目的,二是找一个合适的web framework来写一个好用的web UI。
一的话,IPC有很多种方式,楼上的signal/env/process都是不错的方式。我也很推荐socket,毕竟这也是非常常见的方式。library方面,我推荐
Twisted
或者ZeroMQ
。前者提供了多种IPC方式,不过学起来略有点慢。后者提供了基于socket的IPC方式,非常灵活。二的话,
Django
/bottle
/web.py
等等等等,随便抓一个来用就是了。1. 你可以通过发 signal 嘛
http://docs.python.org/2/library/sign...
2. 通过环境变量,通过 python 修改环境变量 ,然后在爬虫中判断标识
3. 通过 subprocess 调用脚本,关闭时杀掉进程
4. 用 scrapy 改写下,似乎是支持通过 web 去控制的。
http://doc.scrapy.org/en/latest/topic...
我之前自己尝试过写过一个框架,其实也就是通过python的os.popen执行shell
在每个需要web控制脚本启动的机器上都写一个tornado的API服务,然后有一个前台页面,API可以查询指定脚本(实质是得到脚本名的参数,然后python执行shell命令——ps aux | grep 脚本名称)然后读取结果返回前台页面,然后会得到相应的进程id,再通过传递进程ID参数去执行kill操作,也可以传递命令参数,然后tornado处理。
这样做很偷懒,但是安全性不好。
最偷懒的方法,写个cgi,cgi内容是执行一段bash脚本,cgi可以用perl python php写都行
比较推荐通过变量的方式控制,变量可以是爬虫内部的,也可以是文件或者db的某个标记,爬虫一轮一轮的跑,每一次都读取一下这个变量即可。