用Python將HTML轉爲PDF。

上期提到了如何獲取公衆號文章信息,這回就說下怎麼將網頁轉爲PDF,方便日常學習。html


而後擴散一下以前一個比賽的結果(華章計算機抖音大賽)。數據庫


順便談談本身對從此送書的一個想法。微信


另外以前的送書活動,有中獎的讀者沒有聯繫我,因此這回一併送出。app


明天還會送兩本書,你們也能夠關注一下。ide



/ 01 / HTML轉PDF學習


主要用到的庫有pdfkit及wkhtmltopdf。url


安裝我就不說了,網上也是一堆教程,經過下面的代碼也能略知一二。spa


須要注意的點就是,把網頁轉PDF的時候,須要將網頁的圖片下載下來,保存在本地。orm


而後生成網頁時調用本地的圖片,這樣就不會出如今PDF中圖片缺失的狀況。htm


本次沒有去設置詳細的PDF參數,因此生成的PDF排版並非很友好,不過仍是能湊合看的。


具體轉換代碼以下。


 
 

import pandas as pd
import requests
import pdfkit
import os
import re

# 讀取數據並清洗
df = pd.read_csv('article.csv', header=None, names=['title''digest''article_url''date'], encoding='gbk')
df['date'] = pd.to_datetime(df.date.values, unit='s', utc=True).tz_convert('Asia/Shanghai')
df_date = df['date'].astype(str).str.split(' ', expand=True)
df['day'] = df_date[0]
# 獲取目錄的絕對路徑
fileDir = os.path.abspath(os.path.dirname('F:\\article_pdf'))

headers = {
        "User-Agent""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.901.400 QQBrowser/9.0.2524.400",
}

proxies = {
    "https"None,
    "http"None,
}

# 設置轉PDF參數
options = {
        "page-size""Letter",
        "encoding""UTF-8",
        "custom-header": [
            ("Accept-Encoding""gzip")
        ]
    }

# 調用wkhtmltopdf
# confg = pdfkit.configuration(wkhtmltopdf=r"C:\Users\Administrator\wkhtmltox-0.12.5-1.mxe-cross-win64\wkhtmltox\bin\wkhtmltopdf.exe")

for title, url, date in zip(df['title'], df['article_url'], df['day']):
    print(title, url, date)
    # 替換特殊符號
    title = re.sub('[\/::*?"<>|]''', title)
    title = title.replace('\\''_')
    # html文件名
    html_name = '{}/{}.html'.format('F:\\article_pdf', date + '_' + title)
    res = requests.get(url, headers=headers, proxies=proxies, timeout=3)
    html = res.text
    # 用?來控制正則貪婪和非貪婪匹配;(.*?) 小括號來控制是否包含匹配的關鍵字
    pattern = re.compile(r'data-src=\"http.*?\"')
    result = pattern.findall(html)
    picCnt = 0
    for i in result:
        picCnt = picCnt + 1
        url = re.findall(r'\"(.*?)\"', i)[0]
        # 圖片名
        picture_name = '{}/{}.png'.format('F:\\article_pdf', str(picCnt))
        # 調用本地圖片
        html = html.replace(url, picture_name)
        # 獲取圖片內容
        r = requests.get(url)
        with open(picture_name, "wb+"as f:
            f.write(r.content)
        # 保存html文件
        html = html.replace('data-src''src')
        fd = open(html_name, 'w', encoding="utf-8")
        fd.write(html)
        fd.close()

    pdf_name = '{}/{}.pdf'.format('F:\\article_pdf', date + '_' + title)
    try:
        # html轉pdf
        pdfkit.from_file(html_name, pdf_name, options=options)
    except:
        pass


最後成功生成全部文章的PDF。


圖片


這裏不知是爲什麼,生成PDF的時間挺長的,平均一個PDF耗時三分鐘。



/ 02 / 比賽結果


以前公衆號對華章計算機抖音大賽進行了推廣,在上個禮拜比賽的結果也出來了。


這裏幫出版社擴散一下比賽結果。


華章計算機抖音大賽比賽結果

華章計算機,公衆號:華章計算機IT抖音王登場!首屆華章計算機抖音大賽得獎做者出爐啦!


固然我也參加了,並且也獲獎了,不過是參與獎,四本書。


圖片


活動參與的人並很少,一共應該就只有8我的參賽。


講道理,900元現金以及30本書,這麼豐厚的獎品,活動卻沒多少人蔘加,這值得沉思。


固然還會有第二屆,屆時我還會幫忙宣傳,這回沒有參加的小夥伴,下回必定要抓住機會。


爲何我會繼續支持呢?這應該源於我以前參加的一個PPT比賽。


圖片


至今,我還留存着參與活動後的那本贈書。


圖片


書很不錯,我也從中學到了很多東西。


固然最重要的是動手就有收穫的道理。


種一棵樹最好的時間是十年前,其次是如今。因此行動起來,絕對沒錯。


從此的送書活動,若是條件容許的話,也將會以一些小比賽的形式送出,敬請期待。



/ 03 /  送書


下面應該是上個禮拜的截圖了,姑且就以此做爲參照。


圖片


以上的讀者,若是對下面這本書有興趣的話。


能夠微信聯繫我,先到先得,就一本。


微信聯繫方式能夠在公衆號菜單欄裏找到。


圖片


一本有關Oracle數據庫的書。


明天送的兩本是有關Python數據分析的書,能夠關注一下。



/ 04 / 總結


兩期的文章代碼已上傳「GitHub」。


點擊左下角閱讀原文,便可獲取


萬水千山老是情,點個「在看」行不行。

相關文章
相關標籤/搜索