Go微信公众号爬虫踩坑实录(二)

过去一周仍然花了些时间更新微信公众号爬虫,又踩到些坑,记录一下。

  • 之前是用semaphore来控制并发下载的goroutine数,后来发现这种方法看起来比较粗放,于是改成固定数量的goroutine池,比如固定30或50个goroutine一直跑着只用于下载HTML,固定15个goroutine一直跑着只用于将HTML转换为PDF,前一种goroutine下载完一个HTML后通过channel告诉后一种goroutine开始转换,感觉好多了。
  • 微信公众号文章中常常包含大量的图片,而且不少公众号经过几年的经营,已经发过多达几千的文章,将所有这些文章全部转换为PDF的话,PDF文件的体积可以达到2GB甚至更多,这么大体积的PDF对阅读器来说是一大考验,虽然PDF的保真度很好,但是在kindle之类没有彩色的阅读器上并没多少用处,所以能生成mobi格式是更好的选择。
  • 爬下来的微信公众号文章HTML里有大量无用的HTML/JS/CSS内容,对于kindlegen来说完全无用,所以只需要保留正文<p></p>之间的内容即可。
  • kindle的HTML渲染程序对HTML tag的支持极其有限,所以将多余的各种style等等attribute删除掉即可。
  • 并不是所有的GIF都能提取出多个frame,大概是因为不是动画的缘故?我不确定,这种情况就直接保存即可。
  • 某些GIF格式图片的存在会引起kindlegen程序crash,我没找出来具体规律,把所有GIF格式全部转换成JPG格式即可。
  • 有些文章被屏蔽了,但仍然会在目录中存在,只有在爬取正文内容时才会返回一个错误信息,而且错误信息分好几种,需要统一处理这些情况。
  • 虽然我每次请求都加入了1~5秒不等的延时,但可能仍然过于频繁,周末调试程序时微信就把我的账号封了查看公众号所有历史消息的功能,直到2天后才恢复,大概需要加入更长时间的延迟才行。
  • mobi文件的封面是一张图片,要在图片上用指定的字体写字可以使用github.com/golang/freetype/truetype包,虽然只支持ttf格式的字体,但也足够了。

本文地址:

https://minidump.info/blog/2018/02/go-wxmp-crawler-develop-memoir-2/

上一篇

Go微信公众号爬虫踩坑实录

用Go开发微信公众号爬虫,踩到一些坑,记录如下。 爬虫必然会开启大量http.Client去抓取内容,于是使用sync.Pool来管理这些http.Client,但是马上就会遇到sync.Pool返回一个nil出来,尝试换成自己写一个简单的Pool实现,仍然有相同问题,后来才发现原来在下面把...…

Coding 全文阅读
下一篇

家中网络问题一则

某天早上起来,发现屋里手机、电脑都上不了网了,照惯例先后重启了一下路由器和WIFI中继,都不管用,感觉问题有点严重了。屋里的网络拓扑如图所示,略显繁杂:大多数情况下,都是R6300v2这个二级路由器不稳定,时不时WIFI连不上了,重启就好了,也遇到过TP-Link的WIFI中继不工作的情况,也...…

network 全文阅读