当前位置:首页 > 文章列表 > 文章 > python教程 > Python爬虫如何抓取特定类型的文档_基于正则过滤后缀名实现

Python爬虫如何抓取特定类型的文档_基于正则过滤后缀名实现

2026-05-04 23:55:10 0浏览 收藏

怎么入门文章编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Python爬虫如何抓取特定类型的文档_基于正则过滤后缀名实现》,涉及到,有需要的可以收藏一下

re.search(r'.pdf$', url) 更可靠,因它可配合先清理 URL 的 # 和 ? 后内容,再精准匹配路径后缀,而 str.endswith() 会因查询参数或锚点返回 False;且正则支持忽略大小写和多格式扩展名。

Python爬虫如何抓取特定类型的文档_基于正则过滤后缀名实现

正则匹配 URL 后缀时,为什么 re.search(r'\.pdf$', url)url.endswith('.pdf') 更可靠?

因为真实网页中的链接常带查询参数或锚点,比如 https://example.com/report.pdf?version=2#page1。用 str.endswith() 会返回 False,而正则 r'\.pdf$' 能正确锚定在“以 .pdf 结尾”(不考虑 fragment 和 query),前提是先去除 #? 后的内容。实际处理中建议先用 urllib.parse.urlparse() 提取 path 字段再匹配。

常见错误是直接对原始 url 字符串做后缀判断,漏掉参数干扰;更隐蔽的问题是忽略大小写——.PDF.Pdf 都应被接受,所以正则推荐写成 r'\.(pdf|docx|xlsx)$' 并加 re.IGNORECASE 标志。

requests 下载前,如何安全判断响应体是否真为文档内容?

仅靠 URL 后缀不可信:服务端可能返回 200 状态但实际是 HTML 登录页、404 重定向页,或 Content-Type 声明为 text/html 却强行塞了 PDF 二进制流。必须检查三件事:

  • response.status_code == 200(且非重定向状态码如 302)
  • response.headers.get('Content-Type', '').lower().startswith(('application/pdf', 'application/vnd.openxmlformats-officedocument'))
  • len(response.content) > 1024(排除极小的错误响应体)

特别注意:有些站点会把 PDF 放在 iframe 或 JS 动态加载,此时 URL 看似合法,但 requests 直接 GET 返回的是外层 HTML。这种得结合 BeautifulSoup 解析页面,找