爬取博主的所有文章並保存為PDF文件


繼續改進上一個項目,上次我們爬取了所有文章,但是保存為TXT文件,查看不方便,而且還無法保存文章中的代碼和圖片。

所以這次保存為PDF文件,方便查看。

需要的工具:

1、wkhtmltopdf安裝包,下載並安裝到電腦上,可使用  pip安裝  ,注意環境變量的配置。具體參見下面的資料。

2、pdfkit文件(whl文件),下載並安裝到pycharm上。

注意安裝 whl 文件時:最好吧把 保存 whl文件的文件夾的路徑  D:\learning python\Scripts  添加到環境變量里面,然后在此文件夾下打開cmd,直接 pip install XXX.whl  即可。

 

調用順序:程序代碼會使用pdfkit,pdfkit會調用wkhtmltopdf,而wkhtmltopdf會調用windows中的wkhtmltopdf.exe來轉化html為pdf。

1、在我們原理項目的基礎上,修改 get_body 方法,直接返回str(div),而不是div.text。

def get_body(url):
    """
    獲取url下文章的正文內容
    :param url:
    :return:
    """
    html_page = get_html(url)
    soup = BeautifulSoup(html_page,'html.parser')   #HTML文檔解析器
    div = soup.find(id = "cnblogs_post_body")
    return str(div)

 

2、然后就是主要的下載方法了:

和之前一樣,先創建一個文件夾,然后吧PDF文件下載到剛剛創建的文件夾下面。

def save_single_file_to_PDF(url):
    """
    首先在py文件同目錄下創建一個以博主名字為名的文件,用來存放爬取的所有文章
    將文章正文保存在txt文件中,名字為文章標題
    有些文章的標題可能不適合直接作為txt文件名,我們可以忽略這些文章
    :param url:
    :return:
    """
    global article_count    #使用全局變量,需要在函數中進行標識
    title = get_title(url)
    body = get_body(url)

    #獲取當前目錄文件,截取目錄后,並自動創建文件
    FILE_PATH = os.getcwd()[:-0]+author
    if not os.path.exists(FILE_PATH):
        os.makedirs(FILE_PATH)

    options = {
        'page-size':'Letter',
        'encoding':"UTF-8",
        'custom-header':[('Accept-Encoding','gzip')]
    }

    try:
        filename = title + '.pdf'

        # 由於wkhtmltopdf軟件的版本問題,只能手動設置軟件目錄,不然無法調用該軟件。
        config = pdfkit.configuration(wkhtmltopdf=r"D:\learning python\wkhtmltopdf\bin\wkhtmltopdf.exe")
        #輸出PDF文件
        pdfkit.from_string(body, 'D:\learning python\coding_python3.6\cnblog\\Andrew\\'+filename, options=options, configuration=config)

        article_count += 1  # 計數變量加1,統計總的下載文件數
        print(filename + "  file have saved...")     #提示文章下載完畢

    except:
        pass

 

但是需要注意的是:如果以上步驟有缺失,可能碰到的問題是:

1.關於no such file or directory:b'' 這種錯誤在python中出現時,意味着有.exe文件需要被調用,

而該.exe文件沒有被安裝或者在控制面板的環境變量中沒有添加該.exe的路徑。另外,有時候需要改pdfkit代碼為下列兩句,才可消除錯誤:

        # 由於wkhtmltopdf軟件的版本問題,只能手動設置軟件目錄,不然無法調用該軟件。
        config = pdfkit.configuration(wkhtmltopdf=r"D:\learning python\wkhtmltopdf\bin\wkhtmltopdf.exe")
        #輸出PDF文件
        pdfkit.from_string(body, 'D:\learning python\coding_python3.6\cnblog\\Andrew\\'+filename, options=options, configuration=config)

 

運行結果:

 

項目完整代碼:我的碼雲

參考資料:

項目啟發:http://www.cnblogs.com/xingzhui/p/7887212.html

pdfkit安裝:https://blog.csdn.net/appleyuchi/article/details/70947138

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM