使用 Python 从 PDF 中提取超链接


使用 Python 从 PDF 中提取超链接可以通过使用多个库来完成,例如 **PyPDF2**、**PDFMiner** 和 **pdfx** 等。

  • PyPDF2:Python 内置库,充当 PDF 工具包,允许我们读取和操作 PDF 文件。

  • PDFMiner:用于从 PDF 文档中提取信息的工具,它完全专注于获取和分析文本数据。

  • Pdfx:此模块用于从给定的 PDF 中提取元数据、纯数据和 URL。

使用 PyPDF2

PyPDF2 主要能够提取数据、合并 PDF、拆分和旋转页面。此方法包括读取 PDF 文件并将其转换为文本,然后使用正则表达式从文本中提取 URL。

安装 PyPDF2

要使用此 PyPDF2 库,我们必须使用以下代码进行安装。

pip install PyPDF2

读取 PDF 文件

以下代码将在 二进制模式 ('rb') 中打开 PDF 文件并创建一个文件对象,然后将其传递给 PyPDF2.PdfFileReader 以创建一个 pdfReader 对象,该对象与 PDF 内部的内容进行交互。

pdfReader.numPages 将定义 PDF 中的页面数,而 extractText() 方法将通过迭代每个页面来提取文本。

import PyPDF2
 
file = "Enter PDF File Name" 
pdfFileObject = open(file, 'rb')  
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)  
for page_number in range(pdfReader.numPages):
     
    pageObject = pdfReader.getPage(page_number)
    pdf_text = pageObject.extractText()
    print(pdf_text)
     
pdfFileObject.close()

用于查找 URL 的正则表达式

正则表达式 (regex) 方法用于在文本中搜索特定的模式,例如 URL。在以下代码中,findall() 方法将搜索从 PDF 页面提取的文本,并返回包含 URL 的列表。r"(https?://\S+)" 将查找以 http://https:// 开头的字符串。

# Import Module
import PyPDF2
import re 
 
# Enter File Name
file = "Enter PDF File Name"
 
# Open File file
pdfFileObject = open(file, 'rb')
  
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
 
# Regular Expression (Get URL from String)
def Find(string): 
   
    # findall() has been used 
    # with valid conditions for urls in string 
    regex = r"(https?://\S+)"
    url = re.findall(regex,string)
    return [x for x in url] 
   
# Iterate through all pages
for page_number in range(pdfReader.numPages):
     
    pageObject = pdfReader.getPage(page_number)
     
    # Extract text from page
    pdf_text = pageObject.extractText()
     
    # Print all URL
    print(Find(pdf_text))
     
# CLose the PDF 
pdfFileObject.close() 

Test.pdf


输出

['http://www.education.gov.yk.ca/']

使用 pdfx

pdfx 模块专门用于从给定的 PDF 文件中提取 URL、元数据和纯文本。与 PyPDF2 相比,此方法使提取 URL 的过程更简单。

安装 pdfx

使用“pip install pdfx”安装它。

pip install pdfx

示例

在以下代码中,pdfx.PDFx() 读取给定的 PDF 文件,而 references_as_dict() 方法将返回一个包含在 PDF 文件中找到的 URL 的字典。

# Import Module
import pdfx 
 
# Read PDF File
pdf = pdfx.PDFx("File Name") 
 
# Get list of URL
print(pdf.get_references_as_dict())

输出

{'url':['http://www.education.gov.yk.ca/']}

使用 PDFMiner

与 pyPDF 工具相比,PDFMiner 是功能更强大且更复杂的库。它允许我们详细提取文本、超链接以及 PDF 文件的结构。它通过将整个文件转换为元素树结构来读取 PDF。

安装 PDFMiner

要使用 PDFMiner 库,您首先需要使用以下命令安装它。

pip install pdfminer.six

示例

以下示例代码定义了使用 PDFMiner 逐页读取 PDF,将其转换为文本以提取超链接。extract_pages() 函数处理给定的 PDF 文件并返回布局对象,而 LTLink 对象用于识别 PDF 文件中的超链接。

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTAnno, LTLink

file = "Enter PDF File Name"

# Iterate through PDF pages
for page_layout in extract_pages(file):
    for element in page_layout:
        if isinstance(element, LTTextContainer):
            # Extracting text
            for text_line in element:
                if isinstance(text_line, LTAnno):
                    continue
                print(text_line.get_text())
        if isinstance(element, LTLink):
            # Extracting hyperlinks
            print(f"Found hyperlink: {element.get('uri')}")

输出

Found hyperlink: http://www.education.gov.yk.ca/

更新于:2024-09-17

4K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告