You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python解析PDF格式网页并格式化输出、检索指定关键词

问题原因

你请求的URL返回的是PDF二进制文件,并非HTML格式内容,使用BeautifulSoup解析HTML的逻辑处理二进制PDF内容,自然会得到乱码,也无法检索到PDF内的文本关键词。

解决方案

使用专门的PDF解析库提取文本,推荐使用pdfplumber,它对文本格式的保留度更高,更适合格式化输出和关键词检索。

步骤1:安装依赖库

pip install requests pdfplumber

步骤2:完整实现代码

import requests
import pdfplumber
from io import BytesIO
import urllib3
# 关闭SSL验证告警
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def handle_pdf(url, keyword):
    # 请求PDF文件
    resp = requests.get(url, verify=False, timeout=10)
    if resp.status_code != 200:
        print("请求PDF失败")
        return None, None
    
    # 读取二进制PDF内容,无需落地存本地文件
    with pdfplumber.open(BytesIO(resp.content)) as pdf:
        all_text = ""
        # 逐页提取文本,自动保留原PDF的段落、换行格式
        for page in pdf.pages:
            page_text = page.extract_text()
            if page_text:
                all_text += page_text + "\n--- 第{}页分隔线 ---\n".format(page.page_number)
    
    # 格式化输出前2000字符
    print("PDF前2000字符内容:\n", all_text[:2000])
    
    # 检索关键词位置
    keyword_pos = all_text.find(keyword)
    return all_text, keyword_pos

if __name__ == "__main__":
    url = 'http://www.jsu.edu/ire/factbook/JSUFactbook14-15.pdf'
    target_keyword = "University"
    full_text, pos = handle_pdf(url, target_keyword)
    if pos != -1:
        print(f"\n关键词 '{target_keyword}' 首次出现的位置是第{pos}个字符处")
        # 输出关键词前后的内容方便核对
        print("关键词前后上下文:", full_text[pos-20:pos+20])
    else:
        print(f"\n未找到关键词 '{target_keyword}'")
补充说明
  • 如果你需要更规整的输出格式,可以对提取到的all_text做二次处理,比如使用正则去除多余的连续空行、调整缩进等。
  • 如果需要匹配所有关键词出现的位置,可以使用re.finditer做正则匹配,获取所有匹配项的起止下标。

内容的提问来源于stack exchange,提问作者Saeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:57:00