V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
midysky
V2EX  ›  分享创造

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

  •  
  •   midysky · 2016-07-18 21:34:25 +08:00 · 4321 次点击
    这是一个创建于 3045 天前的主题,其中的信息可能已经有所发展或是发生改变。

    参考产品:火车头采集器、发源地采集引擎、 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 地址。

    第 1 条附言  ·  2016-07-20 10:34:02 +08:00
    求实际应用案例,或开源代码。
    16 条回复    2016-07-20 17:46:08 +08:00
    Moker
        1
    Moker  
       2016-07-18 23:16:45 +08:00
    = =为什么觉得好像广告?
    Felldeadbird
        2
    Felldeadbird  
       2016-07-19 00:19:35 +08:00 via iPhone
    excel 好解决。分块导出再合并。
    Felldeadbird
        3
    Felldeadbird  
       2016-07-19 00:21:35 +08:00 via iPhone
    代理去网上买就行,一年就几百块,总比去爬别人免费提供的稳定多。
    第三方点没理解,看其他人咯
    Comdex
        4
    Comdex  
       2016-07-19 00:46:38 +08:00 via Android
    用 php 做大规模的爬虫采集感觉不靠谱
    midysky
        5
    midysky  
    OP
       2016-07-19 09:23:58 +08:00
    @Comdex 部分逻辑用 PHP ,底层 c++扩展,还有 python 。
    midysky
        6
    midysky  
    OP
       2016-07-19 09:30:32 +08:00
    @Felldeadbird 感谢. ip 网上买的很多。质量高的有测试过哪个好?
    第三点就是采集的数据丢到一个独立的服务器环境进行处理,比如一个完整的 html 全文,过去返回其中一个标签。

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

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

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

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

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

    切分就是 100w 的导出数据, 不要一次取出来,可以分成 100 次,每次 1w 的数据量进行解析之后写入文件的处理。
    你从淘宝看导出的前端业务像是两步,实际上, UI 显示同步数据进度的时候,它后台对应的是一套任务队列,拆成很多步的导出处理,最后导出的数据都保存到文件之后才会显示真实的下载地址。
    midysky
        16
    midysky  
    OP
       2016-07-20 17:46:08 +08:00
    @lecher 关于 100w 数据切分的代码思路大概是怎样的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1394 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 23:45 · PVG 07:45 · LAX 15:45 · JFK 18:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.