最近在开发一款开源云端爬虫采集框架工具(基于 PHP+C 实现)遇到的难坑,求填补!

2016-07-18 21:34:25 +08:00
 midysky

参考产品:火车头采集器、发源地采集引擎、 import.io 。 基础功能主要参考火车头 www.locay.com ,功能不错很全,但是单机的,,。 import.io 是国外的产品,自动化方式采集 web ,网站 www.import.io 经常墙,找灵感的。发源地是上面说是国内首款云采集工具,用了两周很不错。确实是我想要学习的。 www.finndy.com 。做了个采集 V2EX 邮箱的示例: http://www.finndy.com/?robot-7535 各位有好的云采集的产品希望分享,一起研究。

功能基本以火车头为主即可。云菜鸡以发源地的为主,特别是想做个规则市场,类似发源地那种。要是能够实现不写规则自动化智能识别采集最好。这是未来的方向。总结下来就是:火车头+发源地的模式。

目前已完成 70%,等到下面几个问题解决后将开源。目前存在的几个主要问题是: 1 、云端执行的代理 IP 问题:(自己爬过滤 or 其它工具或 api or asdl ,哪个好?) 2 、大量数据 excel/csv 导出问题:(如果一次性从 mysql 类型数据库导出 100w+数据,怎么解决?内存处理,直接 dump 出来一般都卡死) 3 、自定义脚本沙盒怎么处理?(单独的一个 html 处理容器,让用户自己写脚本处理。目前用的 python ,服务器用 php 实现。有没有开源方案开源参考?主要是安全问题)

求牛逼解决方案,优先开放 github 地址。

4207 次点击
所在节点    分享创造
16 条回复
Moker
2016-07-18 23:16:45 +08:00
= =为什么觉得好像广告?
Felldeadbird
2016-07-19 00:19:35 +08:00
excel 好解决。分块导出再合并。
Felldeadbird
2016-07-19 00:21:35 +08:00
代理去网上买就行,一年就几百块,总比去爬别人免费提供的稳定多。
第三方点没理解,看其他人咯
Comdex
2016-07-19 00:46:38 +08:00
用 php 做大规模的爬虫采集感觉不靠谱
midysky
2016-07-19 09:23:58 +08:00
@Comdex 部分逻辑用 PHP ,底层 c++扩展,还有 python 。
midysky
2016-07-19 09:30:32 +08:00
@Felldeadbird 感谢. ip 网上买的很多。质量高的有测试过哪个好?
第三点就是采集的数据丢到一个独立的服务器环境进行处理,比如一个完整的 html 全文,过去返回其中一个标签。

重点是 mysql 导出问题。你说的分块具体是怎样的?效率怎样?
midysky
2016-07-19 09:31:38 +08:00
@Moker 像广告。那我把网址删除?
rekulas
2016-07-19 09:49:36 +08:00
@midysky 爬虫部分不建议和 php 打交道,不然后面你填坑会累死的, dump 可能要自己写程序从 mysql 读取先载入到内存中,可以参考下 sphinx 源码,几千万数据也不会卡住
Felldeadbird
2016-07-19 09:49:39 +08:00
ip 库这个 其实网上 每家都差不多的。 几乎接口提取出来的 最新基本可用率有 60%左右。
mysql 转 excel 这个你可以 分批取数据,先保存为多份小的 excel 文件。最后完全完成 再合并后给用户使用,就正常了。 这样就不需要一次性读取大量数据,占用大量内存和等待时间。
第三点 你是把 采集到的内容 用文本之类的 形式保存,用户需要就调用给他们么?还是说用户写的 规则?
如果是我的话,我会把数据都丢到数据库,数据库管理内容方便。反正先阶段过滤交给 数据库层,业务层不要使用 拼接 SQL ,读取基本不会有很大的注入问题的。
midysky
2016-07-19 10:05:27 +08:00
@Felldeadbird 1 、比如 mysql 导出 100w 结构化数据到 excel ,最好给个大概代码逻辑参考下? mysql 的 output 命令还是 sql 查询处理到内存?
midysky
2016-07-19 10:35:36 +08:00
@rekulas 嗯 php 主要用于逻辑方面。 dump 你说的具体是指 sphinx 的哪个地方? 100w 数据通常从 mysql 数据库到 excel 本地文件,具体什么样的逻辑?
rekulas
2016-07-19 12:11:15 +08:00
@midysky 我认为是直接连接 mysql 然后 select 出来到内存就行了,至于到 excel 你只有自己生成, mysql 本身的工具处理大数据量可能是有些问题
lecher
2016-07-19 13:38:34 +08:00
代理买最省事,免费代理可用性太低。检测可用性的维护成本也很高。

基于要解析 HTML 内容这个事情,不考虑用 nodejs 做解析么,异步加上 js 的支持,要省很多事。这样用户就可以只写 js ,很容易隔离。

百万数据转移,一次取出来太耗内存,代码也处理不了那么快,切分一下,写个导出的任务队列,把任务切成多次写入,开个进程专门跑导出。
midysky
2016-07-19 15:58:40 +08:00
@lecher 代理这块普通透明代理是否适用于爬虫采集?还是必须要用匿名、高匿名的代理?

淘宝支付宝后台导出 excel 数据时就是分两次处理的。第一步显示 UI 同步导出数据到文件,第二步将该文件链接作为下载对象进行导出下载。你说的切分是怎样的逻辑?
lecher
2016-07-19 20:59:59 +08:00
透明代理在有意分析的情况下可以检测出来使用了代理。实际情况上,是否使用代理并不是重点。容易被清洗的请求通常是 ip 黑名单,就是这个代理 ip 发出来的请求数量太多,加上服务端有意收集 ip 黑名单进行的清洗。

如果只要代理池里面的 ip 没有太高的流量出去,问题都不大。

切分就是 100w 的导出数据, 不要一次取出来,可以分成 100 次,每次 1w 的数据量进行解析之后写入文件的处理。
你从淘宝看导出的前端业务像是两步,实际上, UI 显示同步数据进度的时候,它后台对应的是一套任务队列,拆成很多步的导出处理,最后导出的数据都保存到文件之后才会显示真实的下载地址。
midysky
2016-07-20 17:46:08 +08:00
@lecher 关于 100w 数据切分的代码思路大概是怎样的?

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

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

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

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

© 2021 V2EX