这篇文章接着使用订阅号获取微信公众号历史文章看(微信可查看原文链接)。一般爬虫都选择去分析 html 源码,从中选择对我们有用的元素进行保存,但是这样很容易就把作者写文章时的排版给扔掉了,而且有的文章本身就使用了一些图片加以说明,为了保证原汁原味的阅读体验,尝试了一下直接截屏保存的效果还不错。
网页截屏保存
selenium 库中 webdriver 已经提供了截屏功能,代码如下所示,但是使用之后发现,它仅仅是截取当前屏幕显示的内容,而很多文章一屏是没法显示全的,就需要日常已经习以为常的截长图操作了。
driver.save_screenshot(FILENAME)
在网上找到了一个简单的方法,只需要把 chromedriver 换成 PhantomJS (网络自行下载)就可以了,代码和上面是一样的。
def screen_shot(article_list):
br = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH)
br.maximize_window()
for article in article_list:
br.get(article.get("link"))
time.sleep(3)
br.save_screenshot(PATH + article.get("title") + ".png")
br.close()
print("screenshot finishied")
将图片合成 pdf
把文章截屏下来之后,发现体验还是不好,图片太多了而且没有规律,脑袋里的第一想法就是把图片组织成一本书不就方便了嘛,于是就用了下面的一小段代码。实际运用的时,如果文件数量很多,这段代码的速度貌似很慢。
def imgs_to_pdf():
pdf = FPDF()
pdf.add_page()
for img in os.listdir(IMAGES_PATH):
pdf.image(PATH+img, w=PDF_WIDTH, h=PDF_HEIGHT)
pdf.output(FILENAME)
两点感悟
闲来做完上面的小功能后,突然有一点失落,虽然用专业知识给自己的生活提供了一点点方便,但却并没有什么成就感,因为 python 封装的太好了,基本上你要干的事都有人已经写好了相关的库,你直接调用就行了,这给自己带来的影响就是:编程全变成了功能的堆砌,是个学编程的都能做,对原理完全没有深入。不禁想起了之前转载的关于“算法工程师”一词的理解,国庆期间我朋友圈有两个人很特殊,都没有发什么游客照,一个大神在阅读 unix 源码,另一个在阅读毛选,觉得如果不是富二代、权二代,人与人之间的差距就是这么出来的。
英语学好真的很重要,在查找如何将图片拼接成 pdf 时,用中文搜索了很多,基本上不同平台博客都是同一段代码,而且连错误都一样,浪费时间;后来用 python for images to pdf
作为关键字进行搜索,出来第一个结果就是想要的结果,而且代码很简洁。国内的博主写的好的太少了,联想到国内还有付费包装 github 的服务,简直恶心死了,不知道提供服务和购买服务的人怎么有脸交易。