繼續改進上一個項目,上次我們爬取了所有文章,但是保存為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