この記事では、主に Python で HTML Web ページをキャプチャし、PDF ファイルの形式で保存する方法を紹介します。PyPDF2 モジュールのインストールと、HTML ページをキャプチャし、それに基づいて PDF ファイルを生成するための Python の関連操作スキルを分析します。例の形式の PyPDF2 モジュール。必要な友達はこの記事を参照してください
この記事の例では、Python が HTML Web ページをキャプチャして PDF ファイルとして保存する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
1. はじめに
今日は、HTML Web ページをキャプチャして PDF として保存する方法を紹介します。 。
2. 準備
1. PyPDF2 のインストールと使用 (PDF の結合に使用):
PyPDF2 バージョン: 1.25.1
インストール:
pip install PyPDF2
使用例:
from PyPDF2 import PdfFileMerger merger = PdfFileMerger() input1 = open("hql_1_20.pdf", "rb") input2 = open("hql_21_40.pdf", "rb") merger.append(input1) merger.append(input2) # Write to an output PDF document output = open("hql_all.pdf", "wb") merger.write(output)
2. request と beautifulsoup はクローラーの 2 つのアーティファクトで、reuqests はネットワーク リクエストに使用され、Beautifulsoup は HTML データの操作に使用されます。 この2つのシャトルで作業がスピーディーに行えます。 Scrapy のようなクローラー フレームワークをこのような小さなプログラムで使用するのは少しやりすぎです。さらに、HTML ファイルを PDF に変換するため、対応するライブラリのサポートも必要です。wkhtmltopdf は、複数のプラットフォームで HTML を PDF に変換できる非常に便利なツールです。まず、次の依存関係パッケージをインストールします
pip install requests pip install beautifulsoup4 pip install pdfkit
3. wkhtmltopdf をインストールします
Windows プラットフォームでは、wkhtmltopdf の安定バージョンを http://wkhtmltopdf.org/downloads.html から直接ダウンロードしてインストールします。インストールが完了したら、プログラムの実行パスをシステム環境 $PATH 変数に追加します。そうでない場合、pdfkit は wkhtmltopdf を見つけることができず、「wkhtmltopdf 実行可能ファイルが見つかりません」というエラーが表示されます。 Ubuntu と CentOS はコマンドラインを使用して直接インストールできます
3. データの準備1. 各記事の URL を取得します
url保存テンプレートを使用した各記事の HTML ファイル
html テンプレート:$ sudo apt-get install wkhtmltopdf # ubuntu $ sudo yum intsall wkhtmltopdf # centos
def get_url_list(): """ 获取所有URL目录列表 :return: """ response = requests.get("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000") soup = BeautifulSoup(response.content, "html.parser") menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1] urls = [] for li in menu_tag.find_all("li"): url = "http://www.liaoxuefeng.com" + li.a.get('href') urls.append(url) return urls
3. HTML を PDF に変換します
html_template = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> {content} </body> </html> """
4 .単一の PDF を 1 つの PDF に変換します
def parse_url_to_html(url, name): """ 解析URL,返回HTML内容 :param url:解析的url :param name: 保存的html文件名 :return: html """ try: response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') # 正文 body = soup.find_all(class_="x-wiki-content")[0] # 标题 title = soup.find('h4').get_text() # 标题加入到正文的最前面,居中显示 center_tag = soup.new_tag("center") title_tag = soup.new_tag('h1') title_tag.string = title center_tag.insert(1, title_tag) body.insert(1, center_tag) html = str(body) # body中的img标签的src相对路径的改成绝对路径 pattern = "(<img .*?src=\")(.*?)(\")" def func(m): if not m.group(3).startswith("http"): rtn = m.group(1) + "http://www.liaoxuefeng.com" + m.group(2) + m.group(3) return rtn else: return m.group(1)+m.group(2)+m.group(3) html = re.compile(pattern).sub(func, html) html = html_template.format(content=html) html = html.encode("utf-8") with open(name, 'wb') as f: f.write(html) return name except Exception as e: logging.error("解析错误", exc_info=True)
完全なソースコード:
def save_pdf(htmls, file_name): """ 把所有html文件保存到pdf文件 :param htmls: html文件列表 :param file_name: pdf文件名 :return: """ options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8", 'custom-header': [ ('Accept-Encoding', 'gzip') ], 'cookie': [ ('cookie-name1', 'cookie-value1'), ('cookie-name2', 'cookie-value2'), ], 'outline-depth': 10, } pdfkit.from_file(htmls, file_name, options=options)
関連する推奨事項:
Python は、ページ上のリンクを取得するためのシンプルなクローラー共有を実装します
パイソンBaidu の検索結果ページの Web サイトのタイトル情報の取得を実装します
以上がPython は、HTML Web ページをキャプチャして PDF ファイルとして保存するメソッドを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。