网址: http://whereisjob.com/
先上图:
昨天有人发了个帖子说:「那么多抓招聘网站内容的 V 友,可以把公司地址显示在地图上呀,方便挑选里家近的公司。」 http://v2ex.com/t/213594
然后我看国外有人抓 HackerNews 的 ( http://whoishiring.it/ ),没见国内有人抓 V2EX ,于是就做了个。
源码: https://github.com/VitoVan/whereisjob.com
有兴趣的朋友一起来完善~
1
Razyshen 2015-08-18 09:52:47 +08:00
初涉爬虫领域,用 nodejs 玩的爬虫,各位技术大大有交流技术的吗
|
3
superbear 2015-08-18 10:15:17 +08:00
居然是 lisp ,厉害
|
7
qiayue 2015-08-18 10:46:36 +08:00
地点还需要再细分,最好能够具体到门牌号
目前只到城市,没多大意义 |
8
laotaitai 2015-08-18 10:47:50 +08:00
Lisp 看起来很厉害, 但代码缩进让人看着蛋疼
|
9
vitovan OP @qiayue http://v2ex.com/go/jobs 酷工作里写门牌号的不多,不过也有,类似这个: http://v2ex.com/t/213805
功能慢慢加吧,一起来? https://github.com/VitoVan/whereisjob.com 等 Pull Request ~~ |
10
vitovan OP |
13
djyde 2015-08-18 11:31:07 +08:00
我还以为你要招做爬虫的。。
|
15
eary 2015-08-18 12:34:08 +08:00
这精准到城市,目前所有的招聘网站都能筛选城市。别人的需求应该是精确到街区具体地址。
|
16
laotaitai 2015-08-18 13:05:57 +08:00 1
@vitovan 呃, 我是说 Lisp 的缩进不好看, 整体一眼看去, 特么别扭, 但用 Lisp 写程序, 在满大街用 Java, Python, PHP, OC 等情况下, 特别有逼格. 让我一下子想起那个"黑客与画家"的书.
|
17
laotaitai 2015-08-18 13:07:53 +08:00
我想问下, 也是用 Lisp 爬取数据的么?
|
18
sciooga 2015-08-18 13:54:46 +08:00
楼主看你网站右边写的 “仅显示近两月数据” 你是一天爬了 V 站两个月的数据?还是说数据库只保存最近两个月的数据?
如果是前者,你是怎么做到的? |
20
vitovan OP @laotaitai 是呀,看代码:
https://github.com/VitoVan/whereisjob.com/blob/master/server.lisp (defun get-job-dom (tid ) (format t "REQUESTING PAGE... ~A ~A" tid #\newline ) (multiple-value-bind (job-html ) (drakma:http-request (concatenate 'string "http://v2ex.com/t/" tid )) (parse-html5 job-html ))) |
21
vitovan OP @sciooga
1, 不是。昨天晚上就随手抓了最近几天的数据。 2, 数据库数据没有做删除的操作,还没考虑,不过前台仅返回最近两月的数据。 3, 一天爬 V 站两个月的数据,也是可操作的吧,我昨天试了试 V 站的请求拦截没那么严格。 |
24
laotaitai 2015-08-18 14:57:52 +08:00
@vitovan 呀卧槽! 代码这么精简? 搞得我也想入手 Lisp 了. 听说 Lisp 有很多方言, 你用哪个方言?
|
25
vitovan OP @laotaitai 是呀,代码超级精简,由于没有强类型概念,也就没有什么数据转换概念。原来用 Java 要好几个文件加上一个 Maven 配置的东西,在 Lisp 里可能就一句话。
关于方言,我个人推荐 Common Lisp ,工业化较强,包比较多。 |
26
laotaitai 2015-08-18 15:12:03 +08:00
@vitovan 感谢推荐. 哪天了解下, 要是比 Python 写起来舒服, 直接抛 Python 从 Lisp 了. 哈哈!
|
27
vitovan OP @laotaitai 就像这个例子,总共 281 行代码:页面抓取、 DOM 遍历、模式匹配、数据存储、 WebServer 、定时任务等等全部在里面。
我最喜欢的还不是以上这些,是 Lisp 的 REPL 特性,留了一个 REPL 在服务器上,随时都可以连接上去查看或更改当前内存里的每一个变量、函数、类定义等等随便你想得到的东西。可以在不重启服务的情况下把整个服务代码全部重构。 |
28
vitovan OP @laotaitai 也不用抛 Python 吖,要是做一些本地应用还是用 Python 的好,比如和硬件打交道的:机器学习、录音程序、播放器等一些硬件依赖的东西。
Common Lisp 对于外部依赖处理全靠 CFFI https://common-lisp.net/project/cffi/ 个人感觉是跨平台处理的不是很好,所以遇到类似问题就直接 Python 或 平台语言了 (如: Window 上 C#)。 |
30
laotaitai 2015-08-18 15:32:38 +08:00
@vitovan 我就看中了那个极其精简之度, 就你说的"页面抓取、 DOM 遍历、模式匹配、数据存储、 WebServer 、定时任务", 这个在 Python 简直不能在这么短代码做完的.
Lisp 只要能在 Linux/Unix 上运行, 其他神马都不是问题. |
32
vitovan OP |
35
laotaitai 2015-08-18 17:08:09 +08:00
@vitovan 请教个问题, 我刚才就入手 Common Lisp, 安装了 SBCL, 我输入 sbcl 这个命令, 进入 interactive, 我发觉在这里面试验代码不方便, 不像 Python 的 interactive 方便, 至少 Python 的可以上下左右移动光标.
代码写在文件里, 然后执行, 也不方便, 毕竟我只是想测试临时代码. 你有啥方式可以方便试验 Lisp 代码? |
36
vitovan OP @laotaitai 我的组合建议: Linux + Emacs + Slime + Quicklisp + SBCL ,这样下来全套环境都有了。
中文的 Lisp 教程好像不多,你可以 Google 一下,改天有空了我写个简明教程试试。 |
38
vitovan OP @laotaitai 看错了,入手的话,建议先玩玩 GNU Emacs Lisp https://www.gnu.org/software/emacs/manual/html_node/elisp/
|
40
laotaitai 2015-08-18 21:58:03 +08:00
@vitovan 花了几个小时了解, 发现入门 Lisp 这个语言, 不难. 但是开发环境就蛋疼了, 入门门槛太高了. 光是 Emacs 就把我吓退了. 太特么变态了!
By the way: 你这个 server.lisp 里用的什么 web framework? |
41
vitovan OP |
43
1000copy 2015-08-21 14:19:10 +08:00 1
@vitovan 留一个 REPL 确实是一个提神醒脑的好做法。赞。
想了想, js 也可以做到,虽然不敢说在线重构,但是访问和测试点东西还是够了。 function Foo (){ this.bar = 10 } var repl = require ("repl"); var replServer = repl.start ({ prompt: "my-app > ", }); replServer.context.Foo = Foo λ node test_repl.js my-app > Foo Foo [Function: Foo] my-app > a = new Foo () { bar: 10 } my-app > a.bar 10 my-app > a.bar =11 11 my-app > a { bar: 11 } my-app > |