大家看看有没有用?
下面是代码(最好看图,有高亮):
;;Example 1: Hello World
;;V2EX 好像不需要验证码,此为模拟
GET http://v2ex.com/signin FOR img.captcha
:T 登录失败,需要验证码
:F POST http://v2ex.com/signin WITH u:vitovan p:password FOR a.fade[href=/notifications]
:T GET http://v2ex.com/notifications FOR #Main>.box>div.cell AS JSON
:F 登录失败,未知原因
;;Example 2: Code Block and Params
;;define a block
BLOCK v2ex-login $param
POST http://v2ex.com/signin WITH u:vitovan p:password $param FOR a.fade[href=/notifications]
:T GET http://v2ex.com/notifications FOR #Main>.box>div.cell AS JSON
:F 登录失败,未知原因
;;call block
GET http://v2ex.com/signin FOR img.captcha AS IMG
:T POST http://handle-captcha-service.com/img WITH @RESULT AS TEXT
:T CALL v2ex-login c:@RESULT
:F CALL v2ex-login
伪造头和数据库
;;Example 3: fake HEAD
;;fake HEAD
PUSH @HEAD [User-Agent: "Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0"]
POP @HEAD Referer
GET http://v2ex.com/go/ideas
;;Example 4: database operation, with websocket
BLOCK db-callback $data
$data
BLOCK save-data $data
OPEN ws://127.0.0.1/dbserver
:T SEND $data WITH db-callback
:F 数据库连接失败
CLOSE
BLOCK get-data $param
OPEN ws://127.0.0.1/dbserver
:T SEND $param WITH db-callback
:F 数据库链接失败
CLOSE
;;save data
GET http://v2ex.com FOR a ["href" "text"] AS JSON
:T CALL save-data @RESULT
:F 未知错误
;;get data
CALL get-data lasthead
SET @HEAD @RESULT
GET http://v2ex.com/go/ideas
找到页面 css 路径为 body div.container div.pages div.current 所在元素的 text 值,转换为 int ,加 1 ,作为下一页加入到当前页面 URL 中,继续爬取下一页。
;;找到页面 css 路径为 body div.container div.pages div.current 所在元素的 text 值,转换为 int ,加 1 ,作为下一页加入到当前页面 URL 中,继续爬取下一页。
BLOCK get-next-page $param
INC $param 1
GET http://www.example.com/p=$param
GET http://www.example.com/p=1 FOR div.container>div.pages>div.current ["text"] AS NUMBER
:T CALL get-next-page @RESULT
1
halfcrazy 2015-09-16 21:30:00 +08:00
DSL ?看注释像是 clojure 写的?
|
2
29488503878 2015-09-16 21:35:32 +08:00 1
伪装 http 头怎么办,采集来的数据要入库怎么办
|
3
vitovan OP |
5
cxh116 2015-09-17 07:43:39 +08:00 via Android
解析与数据提取那一块准备写成什么样?
|
6
plqws 2015-09-17 08:40:24 +08:00 via Android
想法很好,不过相对于用代码,我更喜欢图形界面
|
7
bengol 2015-09-17 08:45:47 +08:00 via Android
好丑
|
8
Ncer 2015-09-17 08:46:32 +08:00
有意思
|
9
qdwang 2015-09-17 08:53:43 +08:00 via Android
用 Python 实现过和这个很像的内部 dsl
|
10
tobyxdd 2015-09-17 08:55:12 +08:00 via Android
还不错
|
11
tdifg 2015-09-17 09:19:42 +08:00
要是只为了爬虫这么一件事,为啥不直接写个框架啊?
|
12
est 2015-09-17 09:31:24 +08:00 1
一个场景:
找到页面 css 路径为 body div.container div.pages div.current 所在元素的 text 值,转换为 int ,加 1 ,作为下一页加入到当前页面 URL 中,继续爬取下一页。 |
14
vitovan OP |
19
vitovan OP @est 一些基本的加减乘除还是要有的吧,本来没这个打算(原本是想:所有链接均应该由页面元素点击而来,而不是程序组建),你这么一提还是有必要的。
|
20
est 2015-09-17 12:54:09 +08:00
|
21
vitovan OP @est 像那种非静态 HTML 的页面,打算不做考虑,如果需要的话可以直接挂个 headless WebKit ,如: PhantomJS 。
|
23
hobbyliu 2015-09-18 18:32:14 +08:00
求 gihub 连接
|
24
pythoner 2015-09-20 12:49:23 +08:00
其实如果是专为爬虫设计的话,还需要考虑的东西还有很多,比如:
1 ,需要 JS 渲染的页面怎么办 2 ,数据处理怎么办 3 ,爬虫任务调度怎么办 4 ,分布式怎么办 5 ,抓取频率 /速度怎么控制 6 ,验证码怎么处理 7 ,页面有更新或者 404 了怎么办 8 ,需要代理怎么办 9 ,爬虫状态监控怎么办 等等,够玩一年了。 把这一坨东西加在一起,就不单单是一个“爬虫语言”了,而变成了一个"爬虫框架"。 那么问题来了,写爬虫哪家强? 当然是我大 python 了!我大 python 里从来都不缺少轮子:古有 scrapy ,今有 pyspider ,方方面面都考虑到了。 上网搜“九评 python ”有真相 |