本页代码可以在这里下载。

pyspider简介:

pyspider架构主要分为Scheduler(调度器)、fetcher(抓取器)、Processer(处理器)三个部分,整个爬取过程受到Monitor(监控器)的监控,抓取的结果被Result Worker(结果处理器)处理。
Scheduler发起任务调度,Fetcher负责抓取网页的内容,Processer负责解析网页内容,然后将新生成的Request发给Scheduler进行调度,将生成的提取结果进行输出保存。

pyspider的使用:

首先启动pyspider,在控制台中输入 pyspider all

随后我们访问本地127.0.0.1:5000,发现pyspider已经启动完毕,这个界面就是用来管理项目、编写代码、在线调试、监控任务等。
 

点击右上角的create,创建项目。

其中,左边是代码的调试页面,右边是代码的编辑页面,这里的Handler就是pyspider的主类,我们可以在此定义爬取、解析、存储的逻辑。

接下来我们可以看到crawl_config属性,在这里我们可以将本项目的所有爬取配置统一定义到这里,如Headers、代理等,配置之后全局生效。
然后就是on_start(),爬虫的入口,初始的爬虫请求会在这里生成。
index_page() 方法接受Response,并对接了pyquery,我们直接调用doc()传入相应的CSS选择器就可以像pyquery一样解析页面,并生成新的请求。
detail_page() 和index_page()类似,只不过不再生成请求,解析之后将结果以字典的形式返回。
 
点击run,会发现下面会出来一个on_start()标注,下面请求部分也会出来一个数字1,代表当前有1个请求。
 
 

 
我们点击这个请求可以发现请求变成了232个,并输出了很多URL(因为右边调用的doc()传入了CSS选择器,选择出了所有的链接)。

同时点击下面html、web会出现对应的源码和网页。

显然,我们是不需要所有的链接的,如果我们替换doc里的选择器,我们可以筛选出需要的标题链接。

同时增加一部分,我们可以获取下一页的链接,这时候request变成11个。

现在,索引列表页的解析过程我们就完成了。
pyspider默认发送HTTP请求,但img节点不包括在HTML文档中,所以为了解决没有图片的问题,我们需要使用PhantomJS来解析图片,只要加个参数即可。
 

 
同时更改detail_page()页面中的规则,可以更改抓取的关键字。

 
保存并退回到主界面,更改状态为RUNNING

点击右侧RUN,开始运行。

点击Active Tasks 可以查看当前队列,哪些成功,哪些正在执行。

点击Result可以查看结果,可以点击右上角来以相应格式进行保存。

 

定时爬取:

为了实现定时爬取,我们可以再设置every属性来设置爬取的间隔时间,但是注意这个值不能少于任务的有效时间(@config(age=))
例如:

@every(minutes = 24*60)
def on_start(self):
    self.crawl('http://demo.com', callback = self.index_page)
@config(age = 10*24*60*60)
def index_page(self):
    xxxx

这里,任务的过期时间是10天,而自动爬取的时间间隔为1天。
 

项目状态:

TODO:项目刚刚被创建还没被实现的状态。
STOP:如果想停止某项目的抓取,设置为STOP即可。
CHECKING:正在运行的项目被修改后会变成CHECKING状态,项目在中途出错需要被调整的时候会出现。
DEBUG/RUNNING:这两个状态对运行没有影响,设置成任何一个项目都可以运行,但是二者用来区分项目是否已经测试通过。
PAUSE:当爬取过程中出现多次错误时,项目会自动设置为改状态,并等待一定时间后继续爬取。
 

抓取进度:

在抓取时,会显示4个进度条。

其中5m 1h 1d 指的是最近5分钟、1小时、1天内的请求情况,all代表所有的请求。
蓝色代表任务等待被执行,绿色代表成功的任务,黄色代表请求失败后等待重试的任务,红色代表请求失败次过过多而被跳过的次数。
 

删除项目:

没有直接删除的选项,如果想要删除,将项目分组设置为delete,并设置为STOP,24小时后自动删除。
 
 
 
 
 
.


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注