如何利用Python將網(wǎng)頁文章轉(zhuǎn)PDF,代碼是什么
Admin 2022-08-19 群英技術(shù)資訊 1023 次瀏覽
這篇文章主要講解了“如何利用Python將網(wǎng)頁文章轉(zhuǎn)PDF,代碼是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何利用Python將網(wǎng)頁文章轉(zhuǎn)PDF,代碼是什么”吧!我們有時候看到一篇好的文章,想去保存下來,傳統(tǒng)方式一般是收藏書簽、復(fù)制粘貼到文檔或者直接復(fù)制鏈接保存,但這樣一次兩次還好,數(shù)量多了,比較麻煩不說,還可能不好找~

這個時候,Python的作用就來了,直接抓下來導(dǎo)出為PDF,直接把整個網(wǎng)站的內(nèi)容都導(dǎo)下來都行~

話不多說,我們直接上代碼!
import requests
import parsel
import pdfkit
import os
import re
html_str = """
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
{article}
</body>
</html>
"""
def change_title(title):
"""
替換標(biāo)題中的特殊字符
:param title: 傳入文章標(biāo)題
:return: 返回一個替換掉特殊字符的標(biāo)題
"""
"""
使用re.compile()將正則表達(dá)式的字符串形式編譯為一個對象,通過該對象提供的一些列方法對文本
進(jìn)行匹配查找
re.sub() 第一個參數(shù)對應(yīng)的正則表達(dá)式,第二個參數(shù)為要替換成的字符串, 第三個參數(shù)為源字符串
"""
pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]") # '/ \ : * ? " < > |'
new_title = re.sub(pattern, "_", title) # 替換為下劃線
return new_title
for page in range(1, 11):
"""
發(fā)送請求的url地址,唯一資源定位符
headers: 請求頭 把python偽裝成瀏覽器對服務(wù)器發(fā)送請求, 然后服務(wù)器會給我們返回一個響應(yīng)數(shù)據(jù)
請求頭所加的參數(shù)都是可以在開發(fā)者工具中的headers里面的request headers中找到的
比如 user-agent:代表著瀏覽器的信息
cookies:用戶的信息 常用于檢測是否有登陸賬號
host:域名
referer:常說的防盜鏈,告訴服務(wù)器是從哪個網(wǎng)頁跳轉(zhuǎn)過來的
請求方式:可以通過開發(fā)者工具中headers里面的數(shù)據(jù)看到是什么樣的請求方式
get請求: 是可以直接從服務(wù)器上面獲取數(shù)據(jù)
post請求:需要向服務(wù)器發(fā)送一個數(shù)據(jù) 比如說(搜索/登陸)
response:響應(yīng)對象
狀態(tài)碼: 200表示請求成功 300:重定向 跳轉(zhuǎn) 400:通常是url網(wǎng)址不對 500 一般是服務(wù)器問題
獲取網(wǎng)頁文本數(shù)據(jù) response.text 獲取網(wǎng)頁json字典數(shù)據(jù) response.json() 獲取網(wǎng)頁二進(jìn)制數(shù)據(jù) response.content
"""
url = 'https://****/qdPython/article/list/{page}'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
"""
url里面的****替換為blog.csdn.net即可
把 html 字符串?dāng)?shù)據(jù)轉(zhuǎn)換成一個 Selector 對象
Selector 就具有一系列數(shù)據(jù)解析的方法 css/xpath/re
類選擇器 都是使用圓點.開頭
ID選擇器 是使用#開頭
屬性選擇器:
::text獲取標(biāo)簽里面的文本數(shù)據(jù)
::attr(xxx) 獲取標(biāo)簽內(nèi)某一個屬性的數(shù)據(jù)
get() 從 Selector 對象中提取第一個數(shù)據(jù), 直接返回字符串?dāng)?shù)據(jù)給我們
getall() 從 Selector 對象中提取提取所有數(shù)據(jù), 返回一個列表
"""
selector = parsel.Selector(response.text)
href = selector.css('.article-list div.article-item-box a::attr(href)').getall()
for link in href:
response_1 = requests.get(url=link, headers=headers)
selector_1 = parsel.Selector(response_1.text)
title = selector_1.css('#articleContentId::text').get()
content = selector_1.css('#content_views').get()
new_title = change_title(title)
# 創(chuàng)建文件保存地址以及保存文件的名字 和格式
pdf_path = 'pdf\\' + new_title + '.pdf'
html_path = 'pdf\\' + new_title + '.html'
# str.format() 字符串格式化方法
html = html_str.format(article=content)
"""
with open 打開文件時, 當(dāng)文件對象引用完畢之后會自動關(guān)閉文件
html_path:文件保存路徑以及名字格式
mode:保存方式 w 寫入 如果你不寫mode默認(rèn)是r 讀
encoding: 編碼
as f 重命名 可以自定義
f = open()
f.writer()
f.close()
"""
with open(html_path, mode='w', encoding='utf-8') as f:
f.write(html)
print('正在保存:', title)
# exe 文件存放的路徑
config = pdfkit.configuration(wkhtmltopdf='C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe')
# 把 html 通過 pdfkit 變成 pdf 文件
pdfkit.from_file(html_path, pdf_path, configuration=config)
os.remove(html_path)
兄弟們快去試試吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:[email protected]進(jìn)行舉報,并提供相關(guān)證據(jù),查實之后,將立刻刪除涉嫌侵權(quán)內(nèi)容。
猜你喜歡
這篇文章主要介紹了Python?numpy之線性代數(shù)與隨機漫步,線性代數(shù),矩陣計算,優(yōu)化與內(nèi)存;比如矩陣乘法,分解,行列式等數(shù)學(xué)知識,是所有數(shù)組類庫的重要組成部分
前幾天,在寫一個與差分隱私相關(guān)的簡單程序時,我發(fā)現(xiàn)了一些奇怪的東西:相對于其他的隨機數(shù)生成函數(shù),Python的random.randint()函數(shù)感覺很慢。 由于 randint() 是 Python 中最為常用的生成隨機整數(shù)的API,因此我決定深入挖掘其實現(xiàn)機制以了解其運行效率較低的原因。本文深入探討了 random 模塊的實現(xiàn),并討論了一些更為快速的生成偽隨機整數(shù)的替代方法。
這篇文章主要介紹了python數(shù)據(jù)操作之lambda表達(dá)式詳情,文章基于python的相關(guān)資料展開lambda表達(dá)式具體的內(nèi)容,感興趣的小伙伴可以參考一下
這篇文章主要介紹了Pytorch 查看、釋放已關(guān)閉程序占用的GPU資源的操作,具有很好的參考價值,希望對大家有所幫助。
今天介紹一下Python中常用的正則表達(dá)式處理函數(shù)。Python的正則表達(dá)式主要有兩種方法完成模式匹配:『搜索』和『匹配』 re match re mat
推薦內(nèi)容
相關(guān)標(biāo)簽
成為群英會員,開啟智能安全云計算之旅
立即注冊關(guān)注或聯(lián)系群英網(wǎng)絡(luò)
7x24小時售前:400-678-4567
7x24小時售后:0668-2555666
24小時QQ客服
群英微信公眾號
CNNIC域名投訴舉報處理平臺
服務(wù)電話:010-58813000
服務(wù)郵箱:[email protected]
投訴與建議:0668-2555555
Copyright ? QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版權(quán)所有
增值電信經(jīng)營許可證 : B1.B2-20140078 ICP核準(zhǔn)(ICP備案)粵ICP備09006778號 域名注冊商資質(zhì) 粵 D3.1-20240008