如何用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
相关产品推荐
相关产品推荐

