[TOC]
# 安装
如果你使用 ubuntu请先安装以下依赖包:`apt-get install python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml`
如果需要调用js解析框架,请先照着[phantomjs官网](http://phantomjs.org/build.html)说明安装`phantomjs`应用,并把可执行程序添加到系统环境变量`PATH`中以方便调用。
以上安装完成后,执行以下命令安装pyspider
`pip install pyspider`
# 启动环境
安装完成后运行以下命令运行pyspider程序
`pyspider`
>[info]注意:`pyspider`命令默认会以all模式运行所有的组件,方便调试。作者建议在线上模式分开部署各各组件,详情请查看部署章节
运行成功后用浏览器打开http://localhost:5000/访问控制台
# 编写脚本
在web控制台点create按钮新建任务,项目名自定义。本例项目名为test。
![document/2015-10-08/5615f3a52bec8](https://box.kancloud.cn/document_2015-10-08_5615f3a52bec8.png)
保存后打开代码编辑器(代码编辑器默认有简单的实例代码)
![document/2015-10-08/5615f42ae7d11](https://box.kancloud.cn/document_2015-10-08_5615f42ae7d11.png)
右侧就是代码编辑器,以后可以直接在这添加修改代码。本实例就直接使用以自带的代码吧。代码如下
```
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2015-10-08 12:45:44
# Project: test
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)
@config(priority=2)
def detail_page(self, response):
return {
"url": response.url,
"title": response.doc('title').text(),
}
```
代码简单分析:
* `def on_start(self)` 方法是入口代码。当在web控制台点击`run`按钮时会执行此方法。
* `self.crawl(url, callback=self.index_page)`这个方法是调用API生成一个新的爬取任务,这个任务被添加到待抓取队列。
* `def index_page(self, response)` 这个方法获取一个`Response`对象。 `response.doc`是pyquery对象的一个扩展方法。pyquery是一个类似于jQuery的对象选择器。
* `def detail_page(self, response)`返回一个结果集对象。这个结果默认会被添加到resultdb数据库(如果启动时没有指定数据库默认调用sqlite数据库)。你也可以重写`on_result(self,result)`方法来指定保存位置。
更多知识:
* `@every(minutes=24*60, seconds=0)` 这个设置是告诉`scheduler`(调度器)`on_start`方法每天执行一次。
* `@config(age=10 * 24 * 60 * 60)` 这个设置告诉`scheduler`(调度器)这个`request`(请求)过期时间是10天,10天内再遇到这个请求直接忽略。这个参数也可以在`self.crawl(url, age=10*24*60*60)` 和 `crawl_config`中设置。
* `@config(priority=2)` 这个是优先级设置。数字越小越先执行。
# 执行任务
* 当您完成脚本编写,调试无误后,请先保存您的脚本!然后返回到控制台首页。
* 直接点击项目状态`status`那栏,把状态由TODO改成`debug`或`running`。
* 最后点击项目最右边那个RUN按钮启动项目。
![document/2015-10-08/5615f9fd6410a](https://box.kancloud.cn/document_2015-10-08_5615f9fd6410a.png)
当`progress`那栏有数据显示说明启动成功。到现在就可以点最右侧的`results`查看结果了。