GitHub上超9Kstars的Python爬虫项目——pyspider(国人编写)
时间:2022-05-07
本文章向大家介绍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
安装
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(),
}
执行任务
- 当您完成脚本编写,调试无误后,请先保存您的脚本!然后返回到控制台首页。
- 直接点击项目状态status那栏,把状态由TODO改成debug或running。
- 最后点击项目最右边那个RUN按钮启动项目。
案例分享
pyspider 爬虫教程(一):HTML 和 CSS 选择器 pyspider 爬虫教程(二):AJAX 和 HTTP pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面 pyspider爬京东商品信息案例分享 巧用send_message提高pyspider的抓取速度及避免被封IP 如何把采集结果存入mysql
在线使用Dashboard - pyspider
看到国人自己写的爬虫框架,一点也不别Scrapy差,你说呢
其实我在想,能不能自己写个框架出来:)
Pyspider binux/pyspider 官方文档 pyspider
- Facebook推出用于android数据加密的开源API
- Android 表单验证框架:AValidations
- 推荐系统介绍
- Android WebView 上传文件支持全解析
- 网站管理软件 – AspxSpy2014 Final
- 特性分支与特性开关哪家强?
- Android快速开发框架 roboguice
- 悄悄的干活,打枪的不要!勒索+比特币挖矿木马
- 拥有可移动头像的折叠Android工具栏:CollapsingAvatarToolbar
- Android平台下的第一个Tor木马
- 利用代码实现自定义圆角+阴影按钮 android-flat-button
- 周末阅读:程序员的《权利法案》
- 对利用Adobe 0day – CVE-2014-0502进行攻击的行为分析
- Android系统更改状态栏字体颜色
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法