β

pyspider介绍

Binuxの杂货铺 345 阅读
 

虽然已经发过一篇架构设计,但是觉得还是有必要发一篇介绍。而且拖了那么久的第二里程碑的commit数已经超过第一个版本了。。

那么由我再次介绍一下 pyspider。

缘起

pyspider 来源于以前做的一个垂直搜索引擎使用的爬虫后端。我们需要从200个站点(由于站点失效,不是都同时啦,同时有100+在跑吧)采集数据,并要求在5分钟内将对方网站的更新更新到库中。

所以,灵活的抓取控制是必须的。同时,由于100个站点,每天都可能会有站点失效或者改版,所以需要能够监控模板失效,以及查看抓取状态。

为了达到5分钟更新,我们使用抓取最近更新页上面的最后更新时间,以此来判断页面是否需要再次抓取。

可见,这个项目对于爬虫的监控和调度要求是非常高的。

pyspider 的主要特性

由于功能太多,更多请参考脚本编写指南

感谢 +PhoenixNemo 提供的VPS,提供了一个 demo: demo.pyspider.org。无需安装即可体验。

demo

脚本样例

from libs.base_handler import *
class Handler(BaseHandler):
    '''
    this is a sample handler
    '''
    @every(minutes=24*60, seconds=0)
    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)
    def detail_page(self, response):
        return {
                "url": response.url,
                "title": response.doc('title').text(),
                }

例如这就是创建任务后默认生成的一个脚本示例。

更多特性和文档

 
作者:Binuxの杂货铺
原文地址:pyspider介绍, 感谢原作者分享。