使用 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/