GitHub上超9Kstars的Python爬虫项目——pyspider(国人编写)

a powerful spider(web crawler) system in python.
简介
pyspider:一个国人编写的强大的网络爬虫系统并带有强大的webui。采用python语言编写,分布式架构,支持多种数据库后端,强大的webui支持脚本编辑器,任务监视器,项目管理器以及结果查看器。
特性
python 脚本控制,可以用任何你喜欢的html解析包(内置 pyquery)
web 界面编写调试脚本,起停脚本,监控执行状态,查看活动历史,获取结果产出
数据存储支持mysql, mongodb, redis, sqlite, elasticsearch; postgresql 及 sqlalchemy
队列服务支持rabbitmq, beanstalk, redis 和 kombu
支持抓取 javascript 的页面
组件可替换,支持单机/分布式部署,支持 docker 部署
强大的调度控制,支持超时重爬及优先级设置
支持python2&3
快速入门
安装
如果你使用 ubuntu请先安装以下依赖包:apt-get install python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml如果需要调用js解析框架,请先照着phantomjs官网说明安装phantomjs应用,并把可执行程序添加到系统环境变量path中以方便调用。
注意:本程序在windowns系统中运行问题比较多,作者也没有对win系统做兼容性测试.如果没有特别强的解决问题的能力不建议用windows类系统.
以上安装完成后,执行以下命令安装pyspider
pip install pyspider
启动环境
安装完成后运行以下命令运行pyspider程序
#pyspider
注意:pyspider命令默认会以all模式运行所有的组件,方便调试。作者建议在线上模式分开部署各各组件,详情请查看部署章节
运行成功后用浏览器打开http://localhost:5000/访问控制台
编写脚本
在web控制台点create按钮新建任务,项目名自定义。本例项目名为test。
保存后打开代码编辑器(代码编辑器默认有简单的实例代码)
右侧就是代码编辑器,以后可以直接在这添加修改代码。本实例就直接使用以自带的代码吧。代码如下
#!/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按钮启动项目。
当progress那栏有数据显示说明启动成功。到现在就可以点最右侧的results查看结果了。
项目地址:https://github/binux/pyspider
近期好文
python最全入门资源(学习课程、博客、开发环境)
python项目实战——开发网易云音乐插件
python小项目——使用python写诗