今回はwkhtmltopdf
を使用してPythonコードからHTMLページをPDFでダウンロードする方法について解説します。
LLMなどに入力するデータの収集などにも使用できますので、ぜひ活用してみてください。
目次
wkhtmltopdfとは
wkhtmltopdf
はオープンソースのコマンドラインツールで、HTMLページをPDFファイルに変換する機能を提供します。
WebページのレンダリングにはWebKitレイアウトエンジンを使用しており、CSSやJavaScriptを含む複雑なWebページも高精度にPDFに変換することができます。
これにより、ウェブコンテンツを電子文書や印刷用ファイルとして保存する際に非常に便利です。多くのプログラミング言語から利用可能で、Pythonではpdfkit
などのラッパーライブラリを介して簡単に使用できます。
wkhtmltopdfのインストール
以下のページよりインストーラをダウンロードし、インストールを実行してください。
作成したPythonコード
このPythonスクリプトは、ユーザーが指定したテキストファイルにあるURLリストを読み込み、それらをPDFとしてダウンロードし、保存します。
コード解説
- インポートと設定:
pdfkit
とos
モジュールをインポート。pdfkit
はPDF生成のため、os
はファイルパスの操作のために使用。wkhtmltopdf
の実行ファイルパスを設定。このパスはユーザーのシステムにインストールされているwkhtmltopdf
のパスに合わせて変更する必要がある。
- PDFダウンロード機能:
download_pdf
関数は、与えられたURLリストを処理し、それぞれのウェブページをPDFとして保存する。- 各URLは
pdfkit.from_url
関数を使ってPDFに変換され、指定された出力ディレクトリにdocument_{i}.pdf
という形式で保存される。 - 何らかのエラーが発生した場合は、例外処理によってエラーメッセージが表示される。
- メイン処理:
main
関数では、ユーザーにURLリストが含まれるテキストファイルのパスを入力させる。- 入力されたファイルパスから、テキストファイルを開き、URLのリストを読み込む。
- 読み込んだURLリストを
download_pdf
関数に渡し、PDFのダウンロード処理を実行。 - ファイルが見つからない場合やその他のエラーが発生した場合は、適切なエラーメッセージを表示。
- スクリプトの実行:
- Pythonスクリプトが直接実行された場合(
if __name__ == "__main__":
)、main
関数が呼び出され、プログラムが実行される。
- Pythonスクリプトが直接実行された場合(
作成した全体のソースコード
import pdfkit
import os
# wkhtmltopdfの実行ファイルパスを設定
# このパスは実際のインストールパスに合わせて変更してください
config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')
def download_pdf(urls, output_dir):
# URLのリストを順番に処理
for i, url in enumerate(urls):
try:
# URLからPDFを生成し、指定されたディレクトリに保存
pdfkit.from_url(url, os.path.join(output_dir, f'document_{i}.pdf'), configuration=config)
print(f"Downloaded: {url}")
except Exception as e:
# ダウンロードに失敗した場合、エラーメッセージを表示
print(f"Failed to download {url}: {e}")
def main():
# ユーザーにURLリストが含まれるテキストファイルのパスを入力させる
input_file = input("Enter the path of the text file containing URLs: ")
# 出力ディレクトリをテキストファイルと同じディレクトリに設定
output_dir = os.path.dirname(input_file)
try:
# テキストファイルを読み込み、URLのリストを取得
with open(input_file, 'r') as file:
urls = file.read().splitlines()
download_pdf(urls, output_dir)
except FileNotFoundError:
# ファイルが見つからない場合のエラーを表示
print(f"File not found: {input_file}")
except Exception as e:
# その他のエラーが発生した場合、エラーメッセージを表示
print(f"An error occurred: {e}")
# スクリプトが直接実行された場合にのみmain関数を実行
if __name__ == "__main__":
main()
まとめ
今回はwkhtmltopdf
を使ってWebページをダウンロードする方法について解説しました。
ダウンロードしたPDFファイルをOCRのライブラリなどと組み合わせることで、Web情報の収集を自動化することができます。
ぜひ業務効率化で役立ててみてください。
それでは、また次の記事でお会いしましょう。
コメント