最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python實現(xiàn)網(wǎng)頁文章轉(zhuǎn)PDF文檔

 更新時間:2022年05月25日 16:02:18   作者:嗨學(xué)編程  
有時候看到一篇好的文章,想去保存下來,傳統(tǒng)方式一般是收藏書簽、復(fù)制粘貼到文檔或者直接復(fù)制鏈接保存,但這也太麻煩了。本文將用Python語言實現(xiàn)將網(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()將正則表達式的字符串形式編譯為一個對象,通過該對象提供的一些列方法對文本
    進行匹配查找
    re.sub() 第一個參數(shù)對應(yīng)的正則表達式,第二個參數(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)頁二進制數(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)

兄弟們快去試試吧!

到此這篇關(guān)于基于Python實現(xiàn)網(wǎng)頁文章轉(zhuǎn)PDF文檔的文章就介紹到這了,更多相關(guān)Python網(wǎng)頁文章轉(zhuǎn)PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python基于SMTP協(xié)議實現(xiàn)發(fā)送郵件功能詳解

    Python基于SMTP協(xié)議實現(xiàn)發(fā)送郵件功能詳解

    這篇文章主要介紹了Python基于SMTP協(xié)議實現(xiàn)發(fā)送郵件功能,結(jié)合實例形式分析了Python使用SMTP協(xié)議實現(xiàn)郵件發(fā)送的相關(guān)操作技巧,并總結(jié)分析了Python發(fā)送純文本郵件、郵件附件、圖片郵件等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • python使用 __init__初始化操作簡單示例

    python使用 __init__初始化操作簡單示例

    這篇文章主要介紹了python使用 __init__初始化操作,結(jié)合實例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計中使用__init__進行初始化操作相關(guān)技巧與注意事項,需要的朋友可以參考下
    2019-09-09
  • Django的models模型的具體使用

    Django的models模型的具體使用

    這篇文章主要介紹了Django的models模型的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python彈球小游戲的項目代碼

    Python彈球小游戲的項目代碼

    本文主要介紹了Python彈球小游戲的項目代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python實現(xiàn)隊列的方法示例小結(jié)【數(shù)組,鏈表】

    Python實現(xiàn)隊列的方法示例小結(jié)【數(shù)組,鏈表】

    這篇文章主要介紹了Python實現(xiàn)隊列的方法,結(jié)合實例形式分析了Python基于數(shù)組和鏈表實現(xiàn)隊列的相關(guān)操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2020-02-02
  • pyspark操作MongoDB的方法步驟

    pyspark操作MongoDB的方法步驟

    這篇文章主要介紹了pyspark操作MongoDB的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 教你如何使用Python開發(fā)一個釘釘群應(yīng)答機器人

    教你如何使用Python開發(fā)一個釘釘群應(yīng)答機器人

    在聊天工具大肆侵入我們生活各個方面的今天,各種消息無時無刻不在侵?jǐn)_我們的每一寸時間,這種情況下,一個聊天的機器人就很有必要了.今天,我們來學(xué)習(xí)一下使用 Python 開發(fā)一個釘釘?shù)膽?yīng)答機器人,助你「人生苦短,少回消息」,需要的朋友可以參考下
    2021-06-06
  • Python3的正則表達式詳解

    Python3的正則表達式詳解

    這篇文章主要為大家詳細介紹了Python3正則表達式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python關(guān)于變量名的基礎(chǔ)知識點

    python關(guān)于變量名的基礎(chǔ)知識點

    在本篇文章里小編給大家整理的是關(guān)于python關(guān)于變量名的基礎(chǔ)知識點,需要的朋友們可以參考下。
    2020-03-03
  • 詳解Python中字符串前“b”,“r”,“u”,“f”的作用

    詳解Python中字符串前“b”,“r”,“u”,“f”的作用

    這篇文章主要介紹了Python中字符串前“b”,“r”,“u”,“f”的作用,感興趣的朋友跟隨小編一起看看吧
    2019-12-12

最新評論

黔西县| 合川市| 巩留县| 绩溪县| 大埔县| 赤水市| 广安市| 陕西省| 宝应县| 乌海市| 阳原县| 宜良县| 德阳市| 慈利县| 德清县| 土默特右旗| 综艺| 渭源县| 洱源县| 思南县| 新蔡县| 通辽市| 西安市| 屏南县| 社会| 乐东| 潢川县| 红桥区| 进贤县| 佛坪县| 象山县| 萨嘎县| 东乡县| 灯塔市| 中江县| 沁水县| 平湖市| 花垣县| 彭山县| 镇原县| 乌什县|