• Ruby 爬虫框架 at 2017年11月07日

    自己的淘宝客项目在用 scrapy 抓取数据练手.

    公司有其它同事负责的爬虫项目,不过是用 ruby 自己写的,灵活性相对来说比较弱.

  • Ruby 爬虫框架 at 2017年11月07日

    scrapy 挺弱的这个还真不赞同,就爬虫 框架 来说, 代码层次的灵活性真不是其它框架能比的.

    https://docs.scrapy.org/en/latest/topics/architecture.html
    架构清晰, middleware 可以很好的处理用来做些定向网站抓取的异常处理,或 cookies 切换,或 代理IP 切换.
    item pipelines 能够很方便的能数据进行清洗和保存.
    而 downloader 对那些保存下载资源的项目来说,也可以很好的把资源下载下来再保存到本地或 s3.

    scrapinghub 提供了 Splash 这个库,浏览器集成非常高,支持用 lua 或 js来定制,对某些情景来说,直接使用它能很简单的处理一些反爬虫.
    不过 splash 本身有内存泄漏问题,官方的推荐做是是起两个 docker ,前面再用一个 haproxy 做负载均衡,当一个超内存时,直接重启此 docker .

    本身基于 Twisted 异步网络库实现,所以 GIL 的问题影响并没有那么大.

    弱点来说,就是基于 Twisted , 数据库驱动和 ORM 对它支持的并不是很好.
    相对简单粗爆的处理办理参考 Twisted 官方文档,数据保存另外起线程.否则会阻塞整个 Twisted reactor,在一个页面有很多 items, piplines 的保存反而成为瓶颈.
    或使用 redis twisted 库,先保存到 redis,再另外起进程来清洗数据.
    就这个弱点来说,如果在 ruby 中使用 EventMachine ,也会存在此问题.

    如果纯粹参考 scrapy 来实现的话,感觉还是很难超越它.就 ruby 的 EventMachine 库来说, HTTP Client还是第三方实现. 而 Twisted 官方已经在准备 http2 的实现了.

  • linux 不 patch 还是不能用中文输入法,所有我选 vscode .

    上面说的功能大部分 vscode 都实现了.

  • 谢谢 hooopo 大神了,又介绍了新的东西.

    经测试,换了个正则可以了

    /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
    

    把 @ 前面的 .? 去掉了,貌似就没有问题了

  • 主要提取email地址,比如 email from 地址为 < <aaa@aaa.com>> ,业务需要把 aaa@aaa.com提取出来. 拆分也行,但是最后还是得用正则.

  • 在好网络并发看起来并无差别,如果网站移动终端用户多,差别就大了。

    比如某些移动用户网络不稳定导致一个请求要5秒在请求完成。 在unicorn的2进程下,5秒内只能两个并发(unicorn一个进程同一只能处理一个请求)。而2进程32线程的puma,却可以处理64个并发(puma一个线程处理一个请求)。

  • 使用了 to_char 函数,是无法使用索引的,导致全表扫描.

  • Ruby 中文编码问题? at 2017年08月02日

    签名的 uriencode 有编码要求没有? 比如:

    '中文'的 UTF-8 的 urlencode 的值和 GBK 是不一样的.

    URI.encode('中文') # %E4%B8%AD%E6%96%87
    URI.encode('中文'.encode('GBK')) # %D6%D0%CE%C4
    
  • 物理机 archlinux + awesomewm
    虚拟机 vbox + win 7 thin pc

    awesomewm 真是神器,快捷键支持多屏,多桌面切换屏幕独立.
    比如屏幕1切换到桌面2,屏幕2还是还是桌面1.

Hello...