python 截圖,合成 pdf

劉小緒同學發表於2018-10-07

    這篇文章接著使用訂閱號獲取微信公眾號歷史文章看(微信可檢視原文連結)。一般爬蟲都選擇去分析 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 的服務,簡直噁心死了,不知道提供服務和購買服務的人怎麼有臉交易。

相關文章