Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
8a5695b
modified: distributed.py
Jul 7, 2016
47f62f0
加班加班
Jul 7, 2016
037e3a0
增加server选项
Jul 8, 2016
5ef94b2
修正编码检测正则表达式
Jul 8, 2016
391d290
修正编码检测正则表达式
Jul 8, 2016
f20291c
增加agent代理
Jul 9, 2016
5a4e813
一大堆提交
Jul 9, 2016
fb1be1a
修改etlex
Jul 9, 2016
cd51dd6
提升获取节点文本的逻辑
Jul 9, 2016
64ea014
wr
Jul 9, 2016
b703c18
add batch.sh file
Jul 9, 2016
6abca1f
修正分布式的问题,增加捕获异常
Jul 9, 2016
d9f4ff5
Merge branch 'master' of http://gitlab.alipay-inc.com/desert.zym/etlpy
Jul 9, 2016
d960178
sd
Jul 9, 2016
1a98efd
捕获错误异常
Jul 9, 2016
f5d8e56
提升检测编码的稳定性
Jul 10, 2016
ff6f45f
增加分布式运行的命令行参数
Jul 10, 2016
933bde4
dsf
Jul 10, 2016
57a4221
sd
Jul 10, 2016
dad2da8
设计翻页器
Jul 10, 2016
bafbc27
修正分割策略
Jul 10, 2016
83d0ad3
asdasd
Jul 10, 2016
62aa2d9
dfgsdfg
Jul 10, 2016
c074744
提升分割字符的兼容性
Jul 10, 2016
269d010
更新bug
Jul 10, 2016
8fb0d4b
减少输出
Jul 11, 2016
884f174
sad
Jul 11, 2016
ccb626a
ZXX
Jul 11, 2016
038df2f
重要更新
Jul 18, 2016
2c4eb87
  大量的更新
Jul 18, 2016
f9400cd
dsd
Jul 18, 2016
f4c1971
update
Jul 18, 2016
e8738a2
ds
Jul 18, 2016
5b1a01c
一大堆更新
Jul 18, 2016
3157f7b
sadasd
Jul 18, 2016
1e4694d
分布式更新
Jul 18, 2016
487aabf
增加py2支持
Jul 25, 2016
499fb6c
修改默认端口
Jul 25, 2016
7b020ac
dfg
Jul 25, 2016
d385b51
优化连接器设置
Aug 1, 2016
fd2e368
稳定分布式逻辑
Aug 1, 2016
022d61f
sd
Aug 1, 2016
1c6c978
增加进度条
Aug 2, 2016
3341040
增强编码识别稳定性
Aug 4, 2016
a60b47c
优化编码
Aug 4, 2016
8d353bd
同时支持Py2和py3
Aug 5, 2016
60ed15c
变量名更符合python风格,巨大变化
Aug 5, 2016
9c63925
增加etlpy系统的未来规划
Aug 8, 2016
81397b2
增加项目目标
Aug 8, 2016
7c7f98d
d
Aug 8, 2016
ca1056c
sd
Aug 8, 2016
ec8fe2b
sd
Aug 8, 2016
879da17
sd
Aug 8, 2016
b2c8032
全新改版,不兼容之前的版本
Aug 13, 2016
4ef07cf
人人网抓取
Aug 14, 2016
b434c24
人人抓取python版本
Aug 14, 2016
5471108
sd
Aug 14, 2016
8c30cc2
sd
Aug 14, 2016
5d3daa5
增加测试用例
Aug 18, 2016
1e7fb48
修正md样式
Aug 18, 2016
f58bc78
增加服务稳定度
Aug 18, 2016
1d5197a
一大堆更新
Aug 19, 2016
a839061
更改了目录结构
Aug 29, 2016
6a960db
dsfsdf
Aug 29, 2016
f66af87
烦死了
Aug 29, 2016
4222473
修改task重名问题
Aug 30, 2016
eeb19b2
改改改改!
Aug 30, 2016
18d40ea
sdsad
Aug 30, 2016
c3faf08
代码引用引用....
Aug 31, 2016
2e7b67b
增加日志记录
Sep 2, 2016
77eef6b
增加时间设计
Sep 2, 2016
b2f550b
人人照片抓取
Sep 19, 2016
0c1301e
增加淘女郎
Sep 20, 2016
e34265a
啊啊啊,不想加班
Sep 26, 2016
b8e7d2c
asddsa
Sep 26, 2016
037a409
sfsdf
Sep 26, 2016
9828f98
qwerwer
Sep 26, 2016
bf0042e
一大堆提交
Sep 29, 2016
6aa4011
增加链家爬虫
Oct 8, 2016
21f8fe1
并行策略
Oct 8, 2016
56b490b
改进生活号策略
Nov 8, 2016
911861b
修改keys
Nov 8, 2016
81081ec
又一次重大的更新
Nov 10, 2016
d7a9c61
增加RPC模式
Nov 14, 2016
9e44986
增加at筛选器
Nov 15, 2016
d74f299
提交
Nov 15, 2016
791f2cd
sdd
Nov 15, 2016
647112a
sadas
Nov 15, 2016
947f355
asdas
Nov 15, 2016
9707cff
优化最优文本节点的筛选逻辑
Nov 16, 2016
597f0b8
fix bugs
Nov 16, 2016
19261dd
update
Nov 16, 2016
2dda456
sdd
Nov 16, 2016
80b6b8b
test
Nov 16, 2016
77a9d5c
脑残的判断字符串的方法!!
Nov 16, 2016
8e864e3
屏蔽海报时尚网
Nov 17, 2016
683c39b
对python生成器增加缓存设计
Nov 21, 2016
875f74e
更改rss
Nov 28, 2016
555eeb1
过滤三个RSS网站的广告
Dec 1, 2016
c891910
增加日志输出功能
Dec 1, 2016
f8122e8
fix bug
Dec 3, 2016
68f8d19
RSS增加封面信息
Dec 5, 2016
cfb7f69
RSS增加封面信息
Dec 5, 2016
08196b8
增加乱码过滤功能
Dec 6, 2016
c583ad0
fix bug
Dec 6, 2016
10cf011
流式语言update
Dec 14, 2016
549118b
人人图片抓取
Jan 3, 2017
7cd61a3
数据库bug
Jan 3, 2017
736c360
分布式
Jan 4, 2017
0f9333d
人人网图片清洗
Jan 5, 2017
5d1216e
增加count关键字
Jan 5, 2017
2fab5f1
更新人人网清洗代码
Jan 6, 2017
fcbbbe8
再提交
Jan 6, 2017
f08212e
人人网数据导出
Jan 12, 2017
4bba790
暴风雨的前夜,,这一版本不能执行
Feb 8, 2017
5d59e30
更强悍的升级
Feb 15, 2017
e7a98c3
完善文档
Mar 3, 2017
a0414d9
更新readme.md
Mar 3, 2017
93192ad
update etlpy table md
Mar 3, 2017
cfd2070
完善代码
Mar 10, 2017
dd4aab3
first update
Mar 20, 2017
9449799
update readme
Mar 20, 2017
e7ceb28
hello
May 4, 2017
d19935a
asd
May 4, 2017
f64db18
asd
May 4, 2017
c5881ff
sd
May 9, 2017
a03a348
重新起航
ferventdesert Oct 12, 2017
c218f91
add 大众点评
ferventdesert Oct 12, 2017
0a87726
update
ferventdesert Oct 12, 2017
ee22e77
update
ferventdesert Oct 12, 2017
4960e16
多线程更新
ferventdesert Oct 16, 2017
e2dfbfc
修改更新的方式
ferventdesert Oct 19, 2017
74b8a96
增加lambda序列化
ferventdesert Oct 19, 2017
ac81b61
delete unavailable example
ferventdesert Oct 20, 2017
df926b0
rm ipynb
ferventdesert Oct 20, 2017
6aa51fe
update gitignore
ferventdesert Oct 20, 2017
ce555a2
fix bugs
ferventdesert Oct 24, 2017
ebf4933
fix bugs
ferventdesert Oct 24, 2017
6cc4fb5
增加汽车爬虫
ferventdesert Nov 25, 2017
06de0b3
sad
ferventdesert Nov 25, 2017
5469f12
fix bugs as bug-fix.md
ferventdesert Dec 18, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,18 @@
*.pyc
.idea
.idea
*.ipynb
test
ipynb
etlpy.egg-info
dist
data
EGG-INFO
.vscode
.ipynb_checkpoints
etlpy.egg-info
.DS_Store
__pycache__/
etlpy/__pycache__/
etlpy/pinhole.log
insurance.json
pinhole.log
43 changes: 21 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,31 @@
# etlpy
##designed by desert
a smart stream-like crawler & etl python library

##1.简介
etlpy是基于配置文件的数据采集和清洗工具。
# etlpy: Python编写的流式爬虫系统

写爬虫和数据清洗代码总是很烦人。因此,应该通过工具生成爬虫和数据清洗的代码! etlpy就是为了解决这个问题而生的。
## 简介

通过可视化和图形化设计工具,快速生成爬虫和数据清洗流程,并保存为xml文件,并由etlpy引擎解析它,即可获得最终的数据结果
etlpy是纯Python开发的函数库,实现流式DSL(领域特定语言),能一行内完成爬虫,文件处理和数据清洗等。能和pandas等类库充分集成

##2.使用
使用起来非常简单:
它和linux的bash pipeline,C#的Linq以及作者本人开发的Hawk有高度的相似性。

下面一行代码实现了获取博客园第1到10页的所有html:
```
from etl import ETLTool
tool = ETLTool();
tool.LoadProject('project.xml', '数据清洗ETL-大众点评');
datas = tool.RefreshDatas();
for r in datas:
print(r)
from etlpy.etlpy import *
t= task().p.create(range(1,10)).cp('p:html').format('http://www.cnblogs.com/p{_}').get()
#t.to_df() 生成DataFrame
for data in t:
print data

```
RefreshDatas函数返回的是生成器,通过for循环,即可自动读取所有数据。
把上面的t改成下面的语句,自动监测算法就能自动分析网页结构,生成解析脚本:

`t=task().create().url.set('http://www.cnblogs.com').get().tree().detect()`

##3.基本原理
模块分为 生成,过滤,排序,转换,执行四种。

利用Python的生成器,可以将不同模块组织起来,定义一个流水线,数据(python的字典)会在流水线上被加工和消费。
在p列生成从1到10的数,拷贝p列到html列,将html列合并为url,并发送web请求,最后的html正文保存在html列。

图形化工具是用C#开发的,使用了类似Python生成器的Linq技术。其原始思路来自于Lisp的s-表达式。
etlpy的特性有:

##4. 用途
爬虫,计算,清洗,任何符合一定计算范式的数据,都可以使用它来完成。
- 同时支持python2和python3
- 内置方便的代理,http get/post请求,写法与requests库非常相似
- 内置正则解析,html转义,json转换等数据清洗功能,直接输出
- 能方便地将任务按照协程,线程,进程,和多机分布式的方式进行任务并行
4 changes: 4 additions & 0 deletions batch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
for((i=0; i<$1; ++i))
do
nohup python src/distributed.py client $2 &
done
139 changes: 0 additions & 139 deletions distributed.py

This file was deleted.

65 changes: 65 additions & 0 deletions docs/1.0综述.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# etlpy: A streaming DSL in Python

## Intro

etlpy is a function library written in Python, you can write code in even one line to do complicated web crawler, file processing and data filtering, which can be integred with Pandas, requests.

etlpy是纯Python开发的函数库,实现流式DSL(领域特定语言),能一行内完成爬虫,文件处理和数据清洗等。能和pandas等类库充分集成。纯链式操作,代码极简。

The design philosophy comes from:
- bash pipeline in linux
- Linq in C#
- filter system in jinja2(a template engine)
- flink and blink
- Hawk by same author.

它和linux的bash pipeline,C#的Linq, jinja2的过滤器(filter)以及作者本人开发的Hawk有高度的相似性。

the following code can get html from homepage to page 10 in website cnblogs:

下面一行代码实现了获取博客园第1到10页的所有html:
```
from etlpy import *
t= task().p.create(range(1,10)).cp('p:html').format('http://www.cnblogs.com/p{}').get()

for data in t:
print data

```

It means generate num from 1 to 10 in column p, merge column p to column html, then format string as url like below, send web requests to the certain url and get the html.

Finally, you can get all data from t using iterator.

意思是指:在p列生成从1到10的数,拷贝p列到html列,将html列合并为url,并发送web请求,最后的html正文保存在html列

etlpy supports:
- Python2 & 3
- http proxies, get/posts, really same as famous Python requests library
- regex, filter, html format and clean
- running code in parallel mode without modifying code.

etlpy的特性有:

- 同时支持python2和python3
- 内置方便的代理,http get/post请求,写法与requests库非常相似
- 内置正则解析,html转义,json转换等数据清洗功能,直接输出
- 能方便地将任务按照协程,线程,进程,和多机分布式的方式进行任务并行


















Loading