最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用pdfplumber庫一鍵提取pdf中的所有超鏈接

 更新時(shí)間:2026年04月15日 09:23:47   作者:一位代碼  
超鏈接在 pdf 中被歸類為“鏈接注釋”(Link Annotations),本文將詳細(xì)介紹Python如何基于pdfplumber庫提取PDF中超鏈接,希望對(duì)大家有所幫助

前言

超鏈接在 pdf 中被歸類為“鏈接注釋”(Link Annotations)。

根據(jù) pdf 規(guī)范,超鏈接是一種特殊的注釋類型,其核心結(jié)構(gòu)包含定義可點(diǎn)擊區(qū)域的矩形、指定跳轉(zhuǎn)目標(biāo)的 URI 或頁面信息,以及可選的視覺樣式。這種設(shè)計(jì)允許 pdf 閱讀器識(shí)別并響應(yīng)用戶的點(diǎn)擊行為。

本文基于 python 開源庫 pdfplumber 來提取 pdf 中的超鏈接。

pdfplumber 庫,專門用于解析 pdf 文檔,可提取 pdf 的基本信息(作者、創(chuàng)建時(shí)間、修改時(shí)間…)及表格、文本、圖片、超鏈接等信息,基本可以滿足所有較為簡單的內(nèi)容提取。

pdfplumber 可直接使用 pip 命令進(jìn)行安裝,具體命令如下:

pip install pdfplumber

提取 pdf 中超鏈接詳解

pdfplumber 自帶的 .hyperlinks 屬性,專門用于獲得 pdf 中的所有超鏈接信息,返回結(jié)果為一個(gè)字典列表。

如以下代碼,使用 pdfplumber 打開 test.pdf 后,采用 .hyperlinks 屬性獲取每一頁的超鏈接信息。

import pdfplumber


with pdfplumber.open(r'./data/test.pdf') as pdf_info:
    for page in pdf_info.pages:
        links = page.hyperlinks
    print(links)

上述代碼運(yùn)行后,返回結(jié)果為一個(gè)字典列表,內(nèi)容包含頁碼、URI(目標(biāo)地址)等超鏈接信息。如下圖:

然后根據(jù)需要,提取字典列表中的超鏈接即可。

完整代碼如下,直接復(fù)制該代碼,修改文件路徑為自己的 pdf 完整路徑,即可獲取到 pdf 所有頁中所有的超鏈接。

import pdfplumber


def get_links(file_path):
    res_links = []
    with pdfplumber.open(file_path) as pdf_info:
        page_number = 0
        for page in pdf_info.pages:
            page_number += 1
            links = page.hyperlinks
            if links:
                for link in links:
                    res_link = link.get('uri')
                    res_links.append(res_link)
                print(f'第{page_number}頁,共有{len(links)}個(gè)超鏈接!')
            else:
                print(f'第{page_number}頁,不存在超鏈接!')
    return res_links


if __name__=="__main__":
    # 文件路徑為 pdf 完整路徑
    res_links = get_links('data/FCC_all.pdf')
    print(res_links)

以上僅為 pdf 中超鏈接提取的一種方法,可供參考。

方法補(bǔ)充

基本用法:提取所有超鏈接

核心代碼很簡單:打開 PDF,遍歷每一頁,然后從頁面的 hyperlinks 屬性中提取 uri(目標(biāo)網(wǎng)址)。

import pdfplumber
def extract_links(pdf_path):
    all_links = []
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            page_links = page.hyperlinks
            if page_links:
                for link in page_links:
                    # 每個(gè) link 是一個(gè)字典,'uri' 鍵存儲(chǔ)了目標(biāo)網(wǎng)址
                    uri = link.get('uri')
                    if uri:
                        all_links.append(uri)
    return all_links
if __name__ == "__main__":
    links = extract_links("你的文件.pdf")
    for link in links:
        print(link)

你也可以在遍歷時(shí)加上頁碼,方便記錄:

for i, page in enumerate(pdf.pages):
    links = page.hyperlinks
    if links:
        print(f"第 {i+1} 頁 有 {len(links)} 個(gè)鏈接")
        for link in links:
            print(f"  - {link.get('uri')}")
    else:
        print(f"第 {i+1} 頁 沒有鏈接")

高級(jí)用法:靈活處理

處理其他類型的鏈接

除了 uri(網(wǎng)頁鏈接),hyperlinks 可能還包含內(nèi)部鏈接(指向 PDF 內(nèi)其他頁面,鍵為 page)或文檔級(jí)鏈接(鍵為 nameddest)。

if 'uri' in link:
    print(f"網(wǎng)頁鏈接: {link['uri']}")
elif 'page' in link:
    print(f"內(nèi)部鏈接: 第 {link['page']} 頁")
elif 'nameddest' in link:
    print(f"命名目標(biāo): {link['nameddest']}")

提取鏈接的鏈接文本(高級(jí)技巧)

有時(shí)你需要知道鏈接所關(guān)聯(lián)的文本(例如“點(diǎn)擊這里”)。pdfplumber 本身不直接提供這個(gè)功能,但可以結(jié)合 chars 屬性(包含每個(gè)字符的詳細(xì)信息,如位置坐標(biāo))來間接獲取。基本思路是獲取鏈接的矩形區(qū)域(x0y0x1y1),然后篩選出落在這個(gè)區(qū)域內(nèi)的字符并組合成文本。這需要一定的坐標(biāo)計(jì)算,但能更精確地處理復(fù)雜文檔。

處理加密PDF

pdfplumber.open() 方法支持通過 password 參數(shù)打開加密的 PDF 文件。

with pdfplumber.open("encrypted.pdf", password="你的密碼") as pdf:
    # ... 正常提取鏈接

常見問題與注意事項(xiàng)

  • 鏈接提取不到pdfplumber 提取的是 PDF 中的 “鏈接注釋” (Link Annotations)。如果你需要提取的是文本內(nèi)容中直接以 URL 形式出現(xiàn)的字符串,直接使用文本搜索或正則表達(dá)式會(huì)更合適。
  • CroppedPage 相關(guān)Bug:如果你對(duì)頁面進(jìn)行了裁剪操作,可能會(huì)遇到與 CroppedPage 相關(guān)的超鏈接提取 Bug。如果遇到此類問題,可以嘗試更新 pdfplumber 到最新版本,或直接在原始 Page 對(duì)象上提取鏈接。
  • 掃描版PDFpdfplumber 主要用于處理由計(jì)算機(jī)生成的 PDF(Machine-generated PDFs)。如果 PDF 是掃描件(圖片形式),它無法直接提取其中的超鏈接或文本。你需要先用 OCR 技術(shù)(如 pytesseract)進(jìn)行識(shí)別。

到此這篇關(guān)于python使用pdfplumber庫一鍵提取pdf中的所有超鏈接的文章就介紹到這了,更多相關(guān)python提取pdf超鏈接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)

    Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn)

    這篇文章主要介紹了Python 關(guān)于模塊和加載模塊的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 使用Python程序化設(shè)置PDF文檔的閱覽偏好

    使用Python程序化設(shè)置PDF文檔的閱覽偏好

    在實(shí)際辦公與文檔分發(fā)場(chǎng)景中,PDF 文件的閱讀體驗(yàn)直接影響信息傳遞效率,本文將介紹如何使用 Python 程序化設(shè)置 PDF 文檔的閱覽偏好,包括窗口顯示方式、頁面布局模式、工具欄顯示狀態(tài)、縮放比例等核心設(shè)置,需要的朋友可以參考下
    2026-04-04
  • 大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

    大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

    這篇文章主要為大家介紹了大語言模型的開發(fā)利器langchain安裝使用快速入門學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    今天小編就為大家分享一篇解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python?一篇文章看懂Python集合與字典數(shù)據(jù)類型

    Python?一篇文章看懂Python集合與字典數(shù)據(jù)類型

    集合并不是一種數(shù)據(jù)處理類型,而是一種中間類型。集合(set)是一個(gè)無序、不重復(fù)的元素序列,經(jīng)常被用來處理兩個(gè)列表進(jìn)行交并差的處理性。本文將詳細(xì)講解集合的一些常用方法,感興趣的可以了解一下
    2022-03-03
  • Python數(shù)據(jù)分析之pandas比較操作

    Python數(shù)據(jù)分析之pandas比較操作

    比較操作是很簡單的基礎(chǔ)知識(shí),不過Pandas中的比較操作有一些特殊的點(diǎn),本文介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助.需要的朋友可以參考下
    2021-05-05
  • python使用selenium模擬瀏覽器進(jìn)入好友QQ空間留言功能

    python使用selenium模擬瀏覽器進(jìn)入好友QQ空間留言功能

    這篇文章主要介紹了python使用selenium模擬瀏覽器進(jìn)入好友QQ空間留言,在本文實(shí)現(xiàn)過程中需要注意的是留言框和發(fā)表按鈕在不同的frame,發(fā)表在外面的一層,具體實(shí)現(xiàn)過程跟隨小編一起看看吧
    2022-04-04
  • Python wheel文件詳細(xì)介紹

    Python wheel文件詳細(xì)介紹

    wheel是新的Python的disribution,用于替代Python傳統(tǒng)的egg文件。目前有超過一半的庫文件有對(duì)應(yīng)的wheel文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • Python?yaml格式配置文件操作實(shí)戰(zhàn)教程

    Python?yaml格式配置文件操作實(shí)戰(zhàn)教程

    yaml是專門用來寫配置文件的語言,非常簡潔和強(qiáng)大,用ini也能寫配置文件,看了yaml后,發(fā)現(xiàn)這個(gè)更直觀,更方便,有點(diǎn)類似于json格式,這篇文章主要介紹了Python?yaml格式配置文件操作的相關(guān)資料,需要的朋友可以參考下
    2025-11-11
  • 對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解

    對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解

    今天小編就為大家分享一篇對(duì)Pytorch中nn.ModuleList 和 nn.Sequential詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評(píng)論

襄樊市| 潜山县| 天全县| 通海县| 环江| 石渠县| 宕昌县| 苍梧县| 浮山县| 嘉义县| 临夏市| 东辽县| 息烽县| 汤原县| 榆林市| 伊川县| 纳雍县| 壶关县| 栾川县| 雷山县| 木兰县| 沁阳市| 上蔡县| 深圳市| 子洲县| 平安县| 乌海市| 乌审旗| 西城区| 永平县| 长阳| 广安市| 仁化县| 商河县| 三台县| 綦江县| 武隆县| 邛崃市| 盱眙县| 常山县| 黔西|