Pythonでwkhtmltopdfを使用してWebページをPDFで自動ダウンロードする方法

※本ページはアフィリエイト広告を利用しています

今回はwkhtmltopdfを使用してPythonコードからHTMLページをPDFでダウンロードする方法について解説します。

LLMなどに入力するデータの収集などにも使用できますので、ぜひ活用してみてください。

目次

wkhtmltopdfとは

wkhtmltopdfはオープンソースのコマンドラインツールで、HTMLページをPDFファイルに変換する機能を提供します。

WebページのレンダリングにはWebKitレイアウトエンジンを使用しており、CSSやJavaScriptを含む複雑なWebページも高精度にPDFに変換することができます。

これにより、ウェブコンテンツを電子文書や印刷用ファイルとして保存する際に非常に便利です。多くのプログラミング言語から利用可能で、Pythonではpdfkitなどのラッパーライブラリを介して簡単に使用できます。

wkhtmltopdfのインストール

以下のページよりインストーラをダウンロードし、インストールを実行してください。

作成したPythonコード

このPythonスクリプトは、ユーザーが指定したテキストファイルにあるURLリストを読み込み、それらをPDFとしてダウンロードし、保存します。

コード解説

  1. インポートと設定:
    • pdfkitosモジュールをインポート。pdfkitはPDF生成のため、osはファイルパスの操作のために使用。
    • wkhtmltopdfの実行ファイルパスを設定。このパスはユーザーのシステムにインストールされているwkhtmltopdfのパスに合わせて変更する必要がある。
  2. PDFダウンロード機能:
    • download_pdf関数は、与えられたURLリストを処理し、それぞれのウェブページをPDFとして保存する。
    • 各URLはpdfkit.from_url関数を使ってPDFに変換され、指定された出力ディレクトリにdocument_{i}.pdfという形式で保存される。
    • 何らかのエラーが発生した場合は、例外処理によってエラーメッセージが表示される。
  3. メイン処理:
    • main関数では、ユーザーにURLリストが含まれるテキストファイルのパスを入力させる。
    • 入力されたファイルパスから、テキストファイルを開き、URLのリストを読み込む。
    • 読み込んだURLリストをdownload_pdf関数に渡し、PDFのダウンロード処理を実行。
    • ファイルが見つからない場合やその他のエラーが発生した場合は、適切なエラーメッセージを表示。
  4. スクリプトの実行:
    • Pythonスクリプトが直接実行された場合(if __name__ == "__main__":)、main関数が呼び出され、プログラムが実行される。

作成した全体のソースコード

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情報の収集を自動化することができます。

ぜひ業務効率化で役立ててみてください。

それでは、また次の記事でお会いしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次