[Such-Cute] 网页 -> JSON 转换器,零编程。

2015-09-14 09:32:29 +08:00
 vitovan
心急的朋友可以直接 F12 然后访问:
[http://sc.vitovan.com/get?uri=http://v2ex.com&selector=a&attrs=["text","href"]]( http://sc.vitovan.com/get?uri=http://v2ex.com&selector=a&attrs=["text","href"])
进阶使用可以参考:
http://vitovan.github.io/such-cute/index-cn.html

---

#### 1 ) 你肯定写过爬虫

我也写过。我的第一个爬虫是 Java 写的自动签到机,在公司上班的时候帮了我不少忙,每天都可以睡到自然醒而不用被扣工资。

直到有一天老板来到了我们办公室,而那时候我还在家里的床上。

#### 2 ) 你肯定写过不止一个爬虫

好巧,我也是。第二个爬虫是用来追踪姑娘在虾米上的听歌历史,一旦发现有新的条目,立马就把歌曲播放给我(后来发现虾米好像出的有一个什么「跟听」)。

[这个]( https://github.com/VitoVan/LoveOnXiami ) 是用 Python 写的,一直用的很好,直到有一天我受够了它播放给我的曲子。

#### 3 ) 你肯定不只写过两个爬虫

我也是。我写的第三个爬虫花费了不到 10 个小时的时间,还带着一个地图界面。[它]( http://whereisjob.com/) 把 V2EX 上的[招聘帖子]( http://v2ex.com/go/jobs )抽取过来分析一下然后转化成 JSON ,再分地域展示到高德地图上。

感觉很叼的样子,然而并没有什么卵人用,每天的访问量小于 2 ,还要减去我的那个访问。

#### 4 ) 有没有觉得有些不对劲

我感觉到了(广告要来了)。

写个爬虫并不是很难,但也会花费你不少时间,最后可能还没个卵用。

你还要选个语言 ,然后选个包(抽取网页啦、 DOM 解析啦),然后开始写。

然后调试、测试然后天就黑了,是时候改变一下啦。

#### 5 ) 好了,下面是解决方案

我创建了一个项目 [cl-spider]( https://github.com/VitoVan/cl-spider )。现在它提供两个方法,主要是以 **URI** 、 **CSS SELECTORS** 以及 **HTML ATTRIBUTES** 为参数,然后返回给你想要的数据,比如:

```Lisp
(cl-spider:get-data "https://news.ycombinator.com/" :selector "a" :attrs '("href" "text"))
```

![]( https://raw.githubusercontent.com/VitoVan/cl-spider/master/screenshots/get-data.png )

> "然而这有个卵用,我不用 Lisp 。" \- 杰克·派森王

> "太废物了, JSON 呢?" \- 洛斯·爪哇娜

#### 6 ) 额,真正的解决方案

由于现在用 Lisp 的人不多,我就又创建了一个项目叫 [such-cute]( https://github.com/VitoVan/such-cute ),它是 [cl-spider]( https://github.com/VitoVan/cl-spider ) 的一个网络接口。

用 [such-cute]( https://github.com/VitoVan/such-cute ),你就可以不用触碰 Lisp 代码了,直接用 http 调用就可以返回 JSON 数据:

[http://localhost:5000/get?uri=https://news.ycombinator.com/&selector=a&attrs=["href","text"]]( http://localhost:5000/get?uri=https://news.ycombinator.com/&selector=a&attrs=["href","text"])

![]( https://raw.githubusercontent.com/VitoVan/such-cute/master/screenshots/json.png )

你只需要按照[指示]( https://github.com/VitoVan/such-cute#installation )搭建一个 such-cute 服务。

> "不 不 不 不 不,别想让我碰 Lisp 。" \- 雷曼·菲普尔

> "这太愚蠢了!我还得弄个 Common Lisp 运行环境?" \- 格斯塔夫·鲍斯尔

> "算了,我要点叉了。" \- 西蒙·麦内格

#### 7 ) 算了,就当我什么也没说

点击下面链接:

[http://sc.vitovan.com/get?uri=http://v2ex.com/&selector=a&attrs=["href","text"]]( http://sc.vitovan.com/get?uri=http://v2ex.com/&selector=a&attrs=["href","text"])

然后看这个:[http://vitovan.github.io/such-cute/index-cn.html]( http://vitovan.github.io/such-cute/index-cn.html )
4055 次点击
所在节点    分享创造
39 条回复
mystryl
2015-09-14 09:37:35 +08:00
看错成 S-cute ,我相信我不是一个人。。。
unique
2015-09-14 09:38:35 +08:00
@mystryl 求番号 2333
vitovan
2015-09-14 09:43:17 +08:00
@unique 隐约觉得要歪楼了。
oott123
2015-09-14 09:49:48 +08:00
如果你没用过 YQL ,你应该试试。
vitovan
2015-09-14 09:50:40 +08:00
@oott123 WTF.
vitovan
2015-09-14 09:54:23 +08:00
@oott123 顿时觉得自己好愚蠢。
faceair
2015-09-14 10:22:41 +08:00
你也可以试试 pyspider
oott123
2015-09-14 10:50:13 +08:00
我试着点了一下
sc.vitovan.com/get?uri=http://cachefly.cachefly.net/100mb.test/&selector=a&attrs=%5B%22href%22,%22text%22%5D
然后你的服务器果断的 502 了…… 对不起哈……
vitovan
2015-09-14 10:57:12 +08:00
@oott123 ......
vitovan
2015-09-14 11:00:25 +08:00
@oott123 不至于啊,怎么回事儿呢。
Tink
2015-09-14 11:34:08 +08:00
好像还可以,省了剥离 dom 什么的
21grams
2015-09-14 11:41:15 +08:00
最后不还是要折腾 lisp 吗?
vitovan
2015-09-14 11:44:27 +08:00
@21grams 搭了个个服务,不过不是很稳定。
http://vitovan.github.io/such-cute/index-cn.html
可以试试。
laoyuan
2015-09-14 11:48:34 +08:00
然而并没有什么卵人用。。。
vitovan
2015-09-14 11:54:55 +08:00
@oott123 嘿!多谢啊!有没有什么好的避免的方法?
oott123
2015-09-14 11:57:16 +08:00
@vitovan 设置连接超时、下载超时;读取 x 字节后自动断开;读取到 HTTP 头后获取尺寸,超过一定尺寸则拒绝服务
vitovan
2015-09-14 12:10:28 +08:00
@oott123 Thanks, 现在仅做了 5 秒超时处理,我再调整调整。
ychongsaytc
2015-09-14 12:15:59 +08:00
第一眼看到 s-cute 的自觉面壁。。
Strikeactor
2015-09-14 12:37:03 +08:00
wfxiong1990
2015-09-14 14:42:37 +08:00
问各路大神
同样是 BBS ,水木清华 http://sc.vitovan.com/get?uri=http://m.newsmth.net//&selector=a&attrs=["text as title","href as uri"] 就解析正确

但是 日月光华 http://sc.vitovan.com/get?uri=http://bbs.fudan.edu.cn/m/bbs/top10/&selector=a&attrs=["text as title","href as uri"] 就报错呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220487

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX