python将html存为pdf_用Python将HTML转为PDF。
上期提到了如何獲取公眾號(hào)文章信息,這回就說(shuō)下怎么將網(wǎng)頁(yè)轉(zhuǎn)為PDF,方便日常學(xué)習(xí)。html
而后擴(kuò)散一下以前一個(gè)比賽的結(jié)果(華章計(jì)算機(jī)抖音大賽)。數(shù)據(jù)庫(kù)
順便談?wù)劚旧韺?duì)從此送書的一個(gè)想法。微信
另外以前的送書活動(dòng),有中獎(jiǎng)的讀者沒(méi)有聯(lián)系我,因此這回一并送出。app
明天還會(huì)送兩本書,你們也能夠關(guān)注一下。ide
/ 01 / HTML轉(zhuǎn)PDF學(xué)習(xí)
主要用到的庫(kù)有pdfkit及wkhtmltopdf。url
安裝我就不說(shuō)了,網(wǎng)上也是一堆教程,經(jīng)過(guò)下面的代碼也能略知一二。spa
須要注意的點(diǎn)就是,把網(wǎng)頁(yè)轉(zhuǎn)PDF的時(shí)候,須要將網(wǎng)頁(yè)的圖片下載下來(lái),保存在本地。orm
而后生成網(wǎng)頁(yè)時(shí)調(diào)用本地的圖片,這樣就不會(huì)出如今PDF中圖片缺失的狀況。htm
本次沒(méi)有去設(shè)置詳細(xì)的PDF參數(shù),因此生成的PDF排版并非很友好,不過(guò)仍是能湊合看的。
具體轉(zhuǎn)換代碼以下。
import?pandas?as?pd
import?requests
import?pdfkit
import?os
import?re
#?讀取數(shù)據(jù)并清洗
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]
#?獲取目錄的絕對(duì)路徑
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,
}
#?設(shè)置轉(zhuǎn)PDF參數(shù)
options?=?{
"page-size":?"Letter",
"encoding":?"UTF-8",
"custom-header":?[
("Accept-Encoding",?"gzip")
]
}
#?調(diào)用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)
#?替換特殊符號(hào)
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
#?用?來(lái)控制正則貪婪和非貪婪匹配;(.*?)?小括號(hào)來(lái)控制是否包含匹配的關(guān)鍵字
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))
#?調(diào)用本地圖片
html?=?html.replace(url,?picture_name)
#?獲取圖片內(nèi)容
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轉(zhuǎn)pdf
pdfkit.from_file(html_name,?pdf_name,?options=options)
except:
pass
最后成功生成全部文章的PDF。
這里不知是為什么,生成PDF的時(shí)間挺長(zhǎng)的,平均一個(gè)PDF耗時(shí)三分鐘。
/ 02 / 比賽結(jié)果
以前公眾號(hào)對(duì)華章計(jì)算機(jī)抖音大賽進(jìn)行了推廣,在上個(gè)禮拜比賽的結(jié)果也出來(lái)了。
這里幫出版社擴(kuò)散一下比賽結(jié)果。
華章計(jì)算機(jī)抖音大賽比賽結(jié)果
固然我也參加了,并且也獲獎(jiǎng)了,不過(guò)是參與獎(jiǎng),四本書。
活動(dòng)參與的人并很少,一共應(yīng)該就只有8我的參賽。
講道理,900元現(xiàn)金以及30本書,這么豐厚的獎(jiǎng)品,活動(dòng)卻沒(méi)多少人參加,這值得沉思。
固然還會(huì)有第二屆,屆時(shí)我還會(huì)幫忙宣傳,這回沒(méi)有參加的小伙伴,下回必定要抓住機(jī)會(huì)。
為何我會(huì)繼續(xù)支持呢?這應(yīng)該源于我以前參加的一個(gè)PPT比賽。
至今,我還留存著參與活動(dòng)后的那本贈(zèng)書。
書很不錯(cuò),我也從中學(xué)到了很多東西。
固然最重要的是動(dòng)手就有收獲的道理。
種一棵樹最好的時(shí)間是十年前,其次是如今。因此行動(dòng)起來(lái),絕對(duì)沒(méi)錯(cuò)。
從此的送書活動(dòng),若是條件容許的話,也將會(huì)以一些小比賽的形式送出,敬請(qǐng)期待。
/ 03 /? 送書
下面應(yīng)該是上個(gè)禮拜的截圖了,姑且就以此做為參照。
以上的讀者,若是對(duì)下面這本書有興趣的話。
能夠微信聯(lián)系我,先到先得,就一本。
微信聯(lián)系方式能夠在公眾號(hào)菜單欄里找到。
一本有關(guān)Oracle數(shù)據(jù)庫(kù)的書。
明天送的兩本是有關(guān)Python數(shù)據(jù)分析的書,能夠關(guān)注一下。
/ 04 / 總結(jié)
兩期的文章代碼已上傳「GitHub」。
點(diǎn)擊左下角閱讀原文,便可獲取。
萬(wàn)水千山老是情,點(diǎn)個(gè)「在看」行不行。
總結(jié)
以上是生活随笔為你收集整理的python将html存为pdf_用Python将HTML转为PDF。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 龙之国物语如何点赞(龙是否真的存在过)
- 下一篇: python dict初始化大小_在Py