ホームページ >バックエンド開発 >Python チュートリアル >Python は、HTML Web ページをキャプチャして PDF ファイルとして保存するメソッドを実装します。

Python は、HTML Web ページをキャプチャして PDF ファイルとして保存するメソッドを実装します。

不言
不言オリジナル
2018-05-08 11:55:384346ブラウズ

この記事では、主に 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, &#39;html.parser&#39;)
    # 正文
    body = soup.find_all(class_="x-wiki-content")[0]
    # 标题
    title = soup.find(&#39;h4&#39;).get_text()
    # 标题加入到正文的最前面,居中显示
    center_tag = soup.new_tag("center")
    title_tag = soup.new_tag(&#39;h1&#39;)
    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, &#39;wb&#39;) 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 = {
    &#39;page-size&#39;: &#39;Letter&#39;,
    &#39;margin-top&#39;: &#39;0.75in&#39;,
    &#39;margin-right&#39;: &#39;0.75in&#39;,
    &#39;margin-bottom&#39;: &#39;0.75in&#39;,
    &#39;margin-left&#39;: &#39;0.75in&#39;,
    &#39;encoding&#39;: "UTF-8",
    &#39;custom-header&#39;: [
      (&#39;Accept-Encoding&#39;, &#39;gzip&#39;)
    ],
    &#39;cookie&#39;: [
      (&#39;cookie-name1&#39;, &#39;cookie-value1&#39;),
      (&#39;cookie-name2&#39;, &#39;cookie-value2&#39;),
    ],
    &#39;outline-depth&#39;: 10,
  }
  pdfkit.from_file(htmls, file_name, options=options)

関連する推奨事項:

Python は、ページ上のリンクを取得するためのシンプルなクローラー共有を実装します

パイソンBaidu の検索結果ページの Web サイトのタイトル情報の取得を実装します

以上がPython は、HTML Web ページをキャプチャして PDF ファイルとして保存するメソッドを実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。