宇野  和也

宇野 和也

1634383920

PythonですべてのPDFリンクを抽出する方法

特定のPDFファイルにあるURLを抽出しますか?もしそうなら、あなたは正しい場所にいます。このチュートリアルでは、PythonのpikepdfおよびPyMuPDFライブラリを使用して、PDFファイルからすべてのリンクを抽出します。

特定のPDFファイルからリンクを取得するために2つの方法を使用します。1つはマークアップ、メモ、コメントである注釈を抽出する方法で、実際に通常のPDFリーダーをクリックしてブラウザーにリダイレクトできます。2つ目は抽出です。すべての生のテキストと正規表現使用してURLを解析します。

開始するには、次のライブラリをインストールしましょう。

pip3 install pikepdf PyMuPDF

方法1:アノテーションを使用してURLを抽出する

この手法では、pikepdfライブラリを使用してPDFファイルを開き、各ページのすべての注釈を繰り返し処理して、そこにURLがあるかどうかを確認します。

import pikepdf # pip3 install pikepdf

file = "1810.04805.pdf"
# file = "1710.05006.pdf"
pdf_file = pikepdf.Pdf.open(file)
urls = []
# iterate over PDF pages
for page in pdf_file.pages:
    for annots in page.get("/Annots"):
        uri = annots.get("/A").get("/URI")
        if uri is not None:
            print("[+] URL Found:", uri)
            urls.append(uri)

print("[*] Total URLs extracted:", len(urls))

私はこのPDFファイルでテストしていますが、任意のPDFファイルを自由に使用できます。クリック可能なリンクがあることを確認してください。

そのコードを実行した後、次の出力が得られます。

[+] URL Found: https://github.com/google-research/bert
[+] URL Found: https://github.com/google-research/bert
[+] URL Found: https://gluebenchmark.com/faq
[+] URL Found: https://gluebenchmark.com/leaderboard
...<SNIPPED>...
[+] URL Found: https://gluebenchmark.com/faq
[*] Total URLs extracted: 30

すばらしいことに、そのPDFペーパーから30個のURLを正常に抽出できました。

関連: PythonですべてのWebサイトリンクを抽出する方法

方法2:正規表現を使用してURLを抽出する

このセクションでは、PDFファイルからすべての生のテキストを抽出してから、正規表現使用してURLを解析します。まず、PDFのテキストバージョンを入手しましょう。

import fitz # pip install PyMuPDF
import re

# a regular expression of URLs
url_regex = r"https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=\n]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)"
# extract raw text from pdf
file = "1710.05006.pdf"
# file = "1810.04805.pdf"
# open the PDF file
with fitz.open(file) as pdf:
    text = ""
    for page in pdf:
        # extract text of each PDF page
        text += page.getText()

これtextがURLを解析するターゲット文字列です。reモジュールを使用してURLを解析しましょう。

urls = []
# extract all urls using the regular expression
for match in re.finditer(url_regex, text):
    url = match.group()
    print("[+] URL Found:", url)
    urls.append(url)
print("[*] Total URLs extracted:", len(urls))

出力:

[+] URL Found: https://github.com/
[+] URL Found: https://github.com/tensor
[+] URL Found: http://nlp.seas.harvard.edu/2018/04/03/attention.html
[+] URL Found: https://gluebenchmark.com/faq.
[+] URL Found: https://gluebenchmark.com/leaderboard).
[+] URL Found: https://gluebenchmark.com/leaderboard
[+] URL Found: https://cloudplatform.googleblog.com/2018/06/Cloud-
[+] URL Found: https://gluebenchmark.com/
[+] URL Found: https://gluebenchmark.com/faq
[*] Total URLs extracted: 9

結論

今回は同じPDFファイルから9つのURLのみを抽出しますが、これは2番目の方法が正確でないことを意味するものではありません。このメソッドは、テキスト形式(クリック不可)のURLのみを解析します。

ただし、URLには新しい行(\n)が含まれている可能性があるため、このメソッドには問題がありますurl_regex。そのため、式でそれを許可することをお勧めします。

したがって、結論として、クリック可能なURLを取得する場合は、最初の方法を使用することをお勧めします。これが望ましい方法です。ただし、テキスト形式のURLを取得したい場合は、2番目のURLが役立ちます。

PDFから表や画像を抽出したい場合は、そのためのチュートリアルがあります。

 リンク:https://www.thepythoncode.com/article/extract-pdf-links-with-python

#python 

What is GEEK

Buddha Community

PythonですべてのPDFリンクを抽出する方法
宇野  和也

宇野 和也

1634383920

PythonですべてのPDFリンクを抽出する方法

特定のPDFファイルにあるURLを抽出しますか?もしそうなら、あなたは正しい場所にいます。このチュートリアルでは、PythonのpikepdfおよびPyMuPDFライブラリを使用して、PDFファイルからすべてのリンクを抽出します。

特定のPDFファイルからリンクを取得するために2つの方法を使用します。1つはマークアップ、メモ、コメントである注釈を抽出する方法で、実際に通常のPDFリーダーをクリックしてブラウザーにリダイレクトできます。2つ目は抽出です。すべての生のテキストと正規表現使用してURLを解析します。

開始するには、次のライブラリをインストールしましょう。

pip3 install pikepdf PyMuPDF

方法1:アノテーションを使用してURLを抽出する

この手法では、pikepdfライブラリを使用してPDFファイルを開き、各ページのすべての注釈を繰り返し処理して、そこにURLがあるかどうかを確認します。

import pikepdf # pip3 install pikepdf

file = "1810.04805.pdf"
# file = "1710.05006.pdf"
pdf_file = pikepdf.Pdf.open(file)
urls = []
# iterate over PDF pages
for page in pdf_file.pages:
    for annots in page.get("/Annots"):
        uri = annots.get("/A").get("/URI")
        if uri is not None:
            print("[+] URL Found:", uri)
            urls.append(uri)

print("[*] Total URLs extracted:", len(urls))

私はこのPDFファイルでテストしていますが、任意のPDFファイルを自由に使用できます。クリック可能なリンクがあることを確認してください。

そのコードを実行した後、次の出力が得られます。

[+] URL Found: https://github.com/google-research/bert
[+] URL Found: https://github.com/google-research/bert
[+] URL Found: https://gluebenchmark.com/faq
[+] URL Found: https://gluebenchmark.com/leaderboard
...<SNIPPED>...
[+] URL Found: https://gluebenchmark.com/faq
[*] Total URLs extracted: 30

すばらしいことに、そのPDFペーパーから30個のURLを正常に抽出できました。

関連: PythonですべてのWebサイトリンクを抽出する方法

方法2:正規表現を使用してURLを抽出する

このセクションでは、PDFファイルからすべての生のテキストを抽出してから、正規表現使用してURLを解析します。まず、PDFのテキストバージョンを入手しましょう。

import fitz # pip install PyMuPDF
import re

# a regular expression of URLs
url_regex = r"https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=\n]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)"
# extract raw text from pdf
file = "1710.05006.pdf"
# file = "1810.04805.pdf"
# open the PDF file
with fitz.open(file) as pdf:
    text = ""
    for page in pdf:
        # extract text of each PDF page
        text += page.getText()

これtextがURLを解析するターゲット文字列です。reモジュールを使用してURLを解析しましょう。

urls = []
# extract all urls using the regular expression
for match in re.finditer(url_regex, text):
    url = match.group()
    print("[+] URL Found:", url)
    urls.append(url)
print("[*] Total URLs extracted:", len(urls))

出力:

[+] URL Found: https://github.com/
[+] URL Found: https://github.com/tensor
[+] URL Found: http://nlp.seas.harvard.edu/2018/04/03/attention.html
[+] URL Found: https://gluebenchmark.com/faq.
[+] URL Found: https://gluebenchmark.com/leaderboard).
[+] URL Found: https://gluebenchmark.com/leaderboard
[+] URL Found: https://cloudplatform.googleblog.com/2018/06/Cloud-
[+] URL Found: https://gluebenchmark.com/
[+] URL Found: https://gluebenchmark.com/faq
[*] Total URLs extracted: 9

結論

今回は同じPDFファイルから9つのURLのみを抽出しますが、これは2番目の方法が正確でないことを意味するものではありません。このメソッドは、テキスト形式(クリック不可)のURLのみを解析します。

ただし、URLには新しい行(\n)が含まれている可能性があるため、このメソッドには問題がありますurl_regex。そのため、式でそれを許可することをお勧めします。

したがって、結論として、クリック可能なURLを取得する場合は、最初の方法を使用することをお勧めします。これが望ましい方法です。ただし、テキスト形式のURLを取得したい場合は、2番目のURLが役立ちます。

PDFから表や画像を抽出したい場合は、そのためのチュートリアルがあります。

 リンク:https://www.thepythoncode.com/article/extract-pdf-links-with-python

#python