-
Go微信公众号爬虫踩坑实录(二)
过去一周仍然花了些时间更新微信公众号爬虫,又踩到些坑,记录一下。 之前是用semaphore来控制并发下载的goroutine数,后来发现这种方法看起来比较粗放,于是改成固定数量的goroutine池,比如固定30或50个goroutine一直跑着只用于下载HTML,固定15个goroutine一直跑着只用于将HTML转换为PDF,前一种goroutine下载完一个HTML后通过channel告诉后一种goroutine开始转换,感觉好多了。 微信公众号文章中常常包含大量的图片,而且不...…
-
Go微信公众号爬虫踩坑实录
用Go开发微信公众号爬虫,踩到一些坑,记录如下。 爬虫必然会开启大量http.Client去抓取内容,于是使用sync.Pool来管理这些http.Client,但是马上就会遇到sync.Pool返回一个nil出来,尝试换成自己写一个简单的Pool实现,仍然有相同问题,后来才发现原来在下面把变量改成nil然后放回pool去了。 文章主体的HTML文本下载是很快的,内嵌的图片资源下载很花时间,尤其是有些文章会内嵌很多图片,所以要把下载HTML和下载图片的semaphore并发量按比例调整...…
-
抓取微信公众号文章
一直想要抓取微信公众号文章,目前终于可以一半手动一半自动地抓取指定公众号的所有文章了。现在主流的大概是两种方法,一种是从搜狗那里抓取,另一种是通过中间人攻击的方式从客户端直接抓取,我是用的第二种,各有优缺点吧。从搜狗抓,需要绕开验证码,而且只能抓最新的10篇文章,有些公众号并没有被收录,等等。从客户端抓取,不小心会被封号,这是最大问题。简单记录一下步骤和注意事项: 用OpenSSL生成一个自签名的证书,并导入到客户端所在的系统中,不同系统有不同反应,有些国产Android手机自定义的RO...…
-
开一次年会,失一次望
昨天是一年一次的年会,每年的年会都是大大的失望,虽然说没有期望就不会有失望,但是每年都看着旁边的人能抽中各种高低不同档次的奖品,怎么会没有期望呢!昨天仍然一如既往的没有抽中奖,酒店里面联通信号基本没有,酒店自己的WIFI用他们服务员的话说:“连了WIFI等于没网!”所以连红包都没抢多少。幸亏有一个踩报纸的游戏上去赢了一盒德芙巧克力。然后我们team的一个同事居然中了特等奖,一台iPhone X!已经无力羡慕嫉妒恨了。…
-
树莓派uptime达到365天
今天,我屋里的树莓派uptime已经达到365天了,整整一年,截图留念一下。…
-
初读《七周七并发模型》
前几天粗略翻阅了一下《七周七并发模型》,这是本从v2ex上收来的二手书,虽然算上快递费也并没比新买一本便宜多少,但是知识是无价的,呵呵。《七周七并发模型》讲了7种软件开发中最常使用的并发模型,分别是: 线程和锁,最基础最常用,也是其他并发模型的技术基础。我目前经历过的C++项目中基本上都是使用的这种方案,顶多就是选取不同的锁以应付不同的应用场景。 函数式编程,书中讲了Clojure语言,一种基于JVM而语法上又类似Lisp的语言。函数式编程本身有很多值得讲的,据说它天然的无副作用函数特...…
-
抓取网络小说到Kindle更新
抓取网络小说的小程序断断续续有了不少更新,除了支持更多的小说网站外,还有一些值得一提的内容: 程序结构更加紧凑灵活,新增或删除支持的小说网站只需要直接增加源代码文件或删除对应的源代码文件即可,不需要修改原有的代码。 新增了支持直接生成epub和pdf格式,其中默认的pdf排版针对Kindle DXG做了适配,包括版面大小,边框大小,字体名和字体大小,行间距等,全部都是往在DXG上看最舒服的方向上靠拢。 增加了并发下载的功能,默认以10个并发量下载,然后通过channel把下载的内容传...…
-
2018新年好
2017年完成了人生中的一件大事。其他的就混过去了。昨天厨房里水桶里的水满出来了,漫得满地都是,妹子说发水是大发,新年第一天就发,今年要发啦!晚上吃饭时又一不小心把妹子的饭碗给撞到地上摔碎了,阿姨就说碎碎平安。希望2018年会是个好年。2018年一定要挖一口井。…
-
将expat替换为libxml
我们维护的项目代码量不大,冗余度倒是不低,光是XML parser就有expat,tinyxml,libxml以及一个自己(其实好像是另一个第三方库自带的)手写的parser。我观察了一下,觉得可以把expat和tinyxml都替换为libxml,这段时间就在做这项工作。好在之前的人在expat之外做了一层封装,ExpatWrapper,所以只要修改ExpatWrapper就可以了,不过倒也折腾了不少时间。这个封装在Windows上是编译成一个独立的dll,导出符号跟内部使用的XML pa...…
-
抓取网络小说到Kindle
前些天突然心血来潮,写了个小程序,用于从网上抓取网络小说,然后生成content.html,content.opf和toc.ncx文件,再放入一个合适的字体文件,比如经过我几番比较,在我的Kindle4上使用方正准圆比较好,最后用kindlegen生成mobi文件,于是可以使用kindle来阅读网络小说了。这么多年来我基本上一直是使用电脑或手机来看网络小说,Kindle倒是也买了好几年了,但因为没找到方便的途径把小说弄到kindle上去,于是每次要是连续看3,4个小时小说,眼睛就会累得不行...…
-
日本大阪京都5日游
公司组织的旅游,我报名了日本大阪京都线路,上周四上午出发,这周一(也就是昨天)下午回来。第一天到达大阪关西机场,出来买了ICOCA卡,ICOCA卡需要500日元押金,又内存有1500日元可以刷卡消费,用于坐火车,公交之类的。坐了一个多小时JR线到京都,再转公交车到酒店。我这次去日本只坐了几次公交,发现他们都是统一票价,乘客从后门上车,前门下车,到站时乘客自己走到前门,下车前在司机旁边的机器上刷卡。京都是个比较小的城市,人也少的感觉。晚上去离酒店不远的一家叫串八的馆子吃了一顿,感觉还不错,然...…
-
一种Firefox同步失败的情况
前些天突然发现家里台式机(Windows 10)上的Firefox不能工作了,具体表现是: 同步不正常 某些https网页打不开 重装后变本加厉,所有https网页都打不开了,同步账户也登录不进了(因为会跳转到一个https页面)无论我如何删光Firefox的数据,如何重装Firefox,装不同版本的Firefox都是同样的现象,就差重装系统了(估计重装系统都没用)。本来也怀疑过是家里网络的原因,但是另一个装了32位Windows 10的平板上的Firefox却是工作得好好的样子,所...…
-
一次装Windows的经历
妹子新工作居然要求自带电脑,然后就报到前一天晚上开始折腾一台老ASUS笔记本,结果折腾得自己改坏了系统登录密码,再也进不去系统,只能重装解决。说起来已经好多年不装系统了,年纪越大越懒得折腾。从抽屉翻出好久没用过的U盘准备做安装盘,结果用Win32DiskImager烧了几次U盘都不能启动,我以为是备份的镜像文件有问题,打算第二天去公司找好用的镜像再做。第二天到公司问同事要到了中文Windows7旗舰版的镜像和序列号,顺便问了一下同事用什么软件烧录,才意识到可能是Win32DiskImage...…
-
C++11 lambda表达式tips
C++11加入的lambda表达式是一大进步,大概这样用:int a = 1;auto f = [&a](int n)->int { return n+a;};int b = f(2);这段代码定义了一个lambda表达式,接受一个int变量参数,返回一个int值,同时又要捕获(即在lambda表达式内访问)外部变量a的引用。这里有一些tips: 捕获内建类型变量,即不是class/struct的实例的,如果没有修改的需求,传值比传引用要效率少,一般少1条汇编...…
-
把blog托管到Coding Pages
自从重新开始写blog,都是托管在github pages上,然后通过cloudflare中转以及https证书。这一套方案总的说来工作得挺好的,但是,万事就怕但是,在大陆cloudflare的服务并不是特别稳定。后来发现Coding.net也提供Pages服务了,还集成了Let’s Encrypt的证书服务,于是就迁过去了。迁过去有一些事要解决: 在Coding.net上创建一个新的仓库,添加一个remote:git remote add coding git@git.coding.n...…