欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年05月25日 16:02:18   作者:嗨學(xué)編程  
有時(shí)候看到一篇好的文章,想去保存下來(lái),傳統(tǒng)方式一般是收藏書(shū)簽、復(fù)制粘貼到文檔或者直接復(fù)制鏈接保存,但這也太麻煩了。本文將用Python語(yǔ)言實(shí)現(xiàn)將網(wǎng)上的文章轉(zhuǎn)存為PDF文檔,保存電腦上慢慢看

我們有時(shí)候看到一篇好的文章,想去保存下來(lái),傳統(tǒng)方式一般是收藏書(shū)簽、復(fù)制粘貼到文檔或者直接復(fù)制鏈接保存,但這樣一次兩次還好,數(shù)量多了,比較麻煩不說(shuō),還可能不好找~

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

話(huà)不多說(shuō),我們直接上代碼!

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: 返回一個(gè)替換掉特殊字符的標(biāo)題
    """
    """
    使用re.compile()將正則表達(dá)式的字符串形式編譯為一個(gè)對(duì)象,通過(guò)該對(duì)象提供的一些列方法對(duì)文本
    進(jìn)行匹配查找
    re.sub() 第一個(gè)參數(shù)對(duì)應(yīng)的正則表達(dá)式,第二個(gè)參數(shù)為要替換成的字符串, 第三個(gè)參數(shù)為源字符串
    """
    pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]")  # '/ \ : * ? " < > |'
    new_title = re.sub(pattern, "_", title)  # 替換為下劃線(xiàn)
    return new_title


for page in range(1, 11):
    """
    發(fā)送請(qǐng)求的url地址,唯一資源定位符
    headers: 請(qǐng)求頭 把python偽裝成瀏覽器對(duì)服務(wù)器發(fā)送請(qǐng)求, 然后服務(wù)器會(huì)給我們返回一個(gè)響應(yīng)數(shù)據(jù)
        請(qǐng)求頭所加的參數(shù)都是可以在開(kāi)發(fā)者工具中的headers里面的request headers中找到的
        比如 user-agent:代表著瀏覽器的信息
            cookies:用戶(hù)的信息 常用于檢測(cè)是否有登陸賬號(hào)
            host:域名
            referer:常說(shuō)的防盜鏈,告訴服務(wù)器是從哪個(gè)網(wǎng)頁(yè)跳轉(zhuǎn)過(guò)來(lái)的
    請(qǐng)求方式:可以通過(guò)開(kāi)發(fā)者工具中headers里面的數(shù)據(jù)看到是什么樣的請(qǐng)求方式
        get請(qǐng)求: 是可以直接從服務(wù)器上面獲取數(shù)據(jù)
        post請(qǐng)求:需要向服務(wù)器發(fā)送一個(gè)數(shù)據(jù) 比如說(shuō)(搜索/登陸)
    response:響應(yīng)對(duì)象
    狀態(tài)碼: 200表示請(qǐng)求成功 300:重定向 跳轉(zhuǎn) 400:通常是url網(wǎng)址不對(duì) 500 一般是服務(wù)器問(wèn)題
    獲取網(wǎng)頁(yè)文本數(shù)據(jù) response.text 獲取網(wǎng)頁(yè)json字典數(shù)據(jù) response.json() 獲取網(wǎng)頁(yè)二進(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)換成一個(gè) Selector 對(duì)象
    Selector 就具有一系列數(shù)據(jù)解析的方法  css/xpath/re
    類(lèi)選擇器 都是使用圓點(diǎn).開(kāi)頭
    ID選擇器 是使用#開(kāi)頭
    屬性選擇器:
        ::text獲取標(biāo)簽里面的文本數(shù)據(jù)
        ::attr(xxx) 獲取標(biāo)簽內(nèi)某一個(gè)屬性的數(shù)據(jù)
        get() 從 Selector 對(duì)象中提取第一個(gè)數(shù)據(jù), 直接返回字符串?dāng)?shù)據(jù)給我們
        getall() 從 Selector 對(duì)象中提取提取所有數(shù)據(jù), 返回一個(gè)列表
    """
    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   打開(kāi)文件時(shí), 當(dāng)文件對(duì)象引用完畢之后會(huì)自動(dòng)關(guān)閉文件
        html_path:文件保存路徑以及名字格式 
        mode:保存方式 w 寫(xiě)入 如果你不寫(xiě)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 通過(guò) pdfkit 變成 pdf 文件
        pdfkit.from_file(html_path, pdf_path, configuration=config)
        os.remove(html_path)

兄弟們快去試試吧!

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

相關(guān)文章

  • python的import?機(jī)制是怎么實(shí)現(xiàn)的

    python的import?機(jī)制是怎么實(shí)現(xiàn)的

    這篇文章主要介紹了python的import?機(jī)制是怎么實(shí)現(xiàn)的,import有Python運(yùn)行時(shí)的全局模塊池的維護(hù)和搜索、解析與搜索模塊路徑的樹(shù)狀結(jié)構(gòu)等作用,下文具體相關(guān)介紹需要的小伙伴可以參考一下
    2022-05-05
  • Python線(xiàn)程同步的實(shí)現(xiàn)代碼

    Python線(xiàn)程同步的實(shí)現(xiàn)代碼

    本文介紹了threading 模塊提供的線(xiàn)程同步原語(yǔ)包括:Lock、RLock、Condition、Event、Semaphore等對(duì)象。對(duì)大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Python中的單下劃線(xiàn)和雙下劃線(xiàn)使用場(chǎng)景詳解

    Python中的單下劃線(xiàn)和雙下劃線(xiàn)使用場(chǎng)景詳解

    這篇文章主要介紹了Python中的單下劃線(xiàn)和雙下劃線(xiàn)使用場(chǎng)景詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 詳解python的變量

    詳解python的變量

    這篇文章主要為大家介紹了python中的變量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Python+tkinter自定義實(shí)現(xiàn)文件選擇按鈕

    Python+tkinter自定義實(shí)現(xiàn)文件選擇按鈕

    這篇文章主要為大家詳細(xì)介紹了如何利用Python和tkinter自定義實(shí)現(xiàn)簡(jiǎn)單的文件選擇按鈕和顏色選擇按鈕,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Python實(shí)現(xiàn)采集網(wǎng)站ip代理并檢測(cè)是否可用

    Python實(shí)現(xiàn)采集網(wǎng)站ip代理并檢測(cè)是否可用

    這篇文章主要介紹了如何利用Python爬蟲(chóng)實(shí)現(xiàn)采集網(wǎng)站ip代理,并檢測(cè)IP代理是否可用。文中的示例代碼講解詳細(xì),感興趣的可以試一試
    2022-01-01
  • Python數(shù)據(jù)類(lèi)型詳解(三)元祖:tuple

    Python數(shù)據(jù)類(lèi)型詳解(三)元祖:tuple

    本文給大家介紹的是Python數(shù)據(jù)類(lèi)型中的元祖(tuple),簡(jiǎn)單的說(shuō)Tuple,與列表一樣,元素也是不可變的,但與列表不同,在一個(gè)元祖可以包含不同類(lèi)型的元素
    2016-05-05
  • Windows和Linux下使用Python訪(fǎng)問(wèn)SqlServer的方法介紹

    Windows和Linux下使用Python訪(fǎng)問(wèn)SqlServer的方法介紹

    這篇文章主要介紹了Windows和Linux下使用Python訪(fǎng)問(wèn)SqlServer的方法介紹,本文講解了Windows下配置Python訪(fǎng)問(wèn)Sqlserver、Linux下配置Python訪(fǎng)問(wèn)SqlServer等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Python+Tableau廣東省人口普查可視化的實(shí)現(xiàn)

    Python+Tableau廣東省人口普查可視化的實(shí)現(xiàn)

    本文將結(jié)合實(shí)例代碼,介紹Python+Tableau廣東省人口普查可視化,第七次人口普查數(shù)據(jù)分析,繪制歷次人口普查人口數(shù)量變化圖,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • 分布式全文檢索引擎ElasticSearch原理及使用實(shí)例

    分布式全文檢索引擎ElasticSearch原理及使用實(shí)例

    這篇文章主要介紹了分布式全文檢索引擎ElasticSearch原理及使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論