You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何自动从网页获取指定PDF文件的链接以实现自动下载

如何自动从网页获取指定PDF文件的链接以实现自动下载

嘿,这个需求我太熟了——每次要定期或批量抓这类指定PDF,手动点真的是纯纯浪费时间!下面给你两种最实用的方案,分别对应静态网页动态加载网页,你可以根据目标网页的情况直接套用:


方案一:静态网页用 Python + Requests + BeautifulSoup(最轻便高效)

如果目标网页的内容是直接在HTML里渲染的(F12打开开发者工具,搜“Office Price Index”能直接找到对应的<a>标签),用这个方案准没错——不需要启动浏览器,速度快还省资源。

步骤1:安装依赖

先在命令行里装好需要的工具库:

pip install requests beautifulsoup4

步骤2:可直接复用的示例代码

我写了带详细注释的代码,你只需要替换目标网页的URL就行:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

# 替换成你要爬的目标网页地址
target_url = "https://example.com/your-target-page"
# 我们要定位的PDF名称关键词
pdf_keyword = "Office Price Index"

# 模拟浏览器请求头,避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

try:
    # 发送请求获取网页内容
    response = requests.get(target_url, headers=headers)
    response.raise_for_status()  # 请求失败直接抛出异常

    # 解析HTML结构
    soup = BeautifulSoup(response.text, "html.parser")

    # 遍历所有<a>标签,定位目标PDF链接
    pdf_link = None
    for a_tag in soup.find_all("a", href=True):
        # 同时满足:标签文本包含关键词 + 链接指向PDF文件
        if pdf_keyword in a_tag.get_text(strip=True) and a_tag["href"].endswith(".pdf"):
            # 处理相对链接,转成可直接访问的绝对URL
            pdf_link = urljoin(target_url, a_tag["href"])
            break

    if pdf_link:
        print(f"找到目标PDF链接:{pdf_link}")
        # 自动下载PDF到本地
        pdf_response = requests.get(pdf_link, headers=headers)
        with open("Office_Price_Index.pdf", "wb") as f:
            f.write(pdf_response.content)
        print("PDF下载完成!")
    else:
        print("没找到对应关键词的PDF链接,请检查关键词拼写或网页结构")

except Exception as e:
    print(f"执行过程出错:{str(e)}")

方案二:动态加载网页用 Python + Selenium(应对JS渲染内容)

如果目标网页的链接是通过JavaScript动态生成的(比如滚动加载、点击按钮后才出现链接),静态解析HTML根本找不到内容——这时候就需要用Selenium模拟真实浏览器的行为:

步骤1:安装依赖 + 准备浏览器驱动

先装库:

pip install selenium

然后下载对应你浏览器的驱动(比如Chrome的ChromeDriver),要和你当前浏览器的版本完全匹配,把驱动放在Python的环境变量路径里,或者在代码里指定驱动文件路径。

步骤2:示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests

target_url = "https://example.com/your-dynamic-page"
pdf_keyword = "Office Price Index"

# 初始化Chrome浏览器(用Firefox就换成FirefoxOptions)
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")  # 无头模式,不弹出浏览器窗口
driver = webdriver.Chrome(options=options)

try:
    driver.get(target_url)
    # 等待页面核心元素加载完成,最长等10秒
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "a"))
    )

    # 遍历所有<a>标签,定位目标PDF
    pdf_link = None
    a_tags = driver.find_elements(By.TAG_NAME, "a")
    for a_tag in a_tags:
        tag_text = a_tag.text.strip()
        tag_href = a_tag.get_attribute("href")
        if pdf_keyword in tag_text and tag_href and tag_href.endswith(".pdf"):
            pdf_link = tag_href
            break

    if pdf_link:
        print(f"找到目标PDF链接:{pdf_link}")
        # 用浏览器的UA请求PDF,避免反爬
        headers = {"User-Agent": driver.execute_script("return navigator.userAgent;")}
        pdf_response = requests.get(pdf_link, headers=headers)
        with open("Office_Price_Index.pdf", "wb") as f:
            f.write(pdf_response.content)
        print("PDF下载完成!")
    else:
        print("未找到目标PDF链接,请检查关键词或页面加载逻辑")

finally:
    driver.quit()  # 不管成功失败,都要关闭浏览器释放资源

一些帮你避坑的小贴士

  • 手动验证网页结构:F12打开开发者工具,搜“Office Price Index”,看它对应的<a>标签有没有特殊的classid,代码里可以加更精准的定位(比如soup.find_all("a", class_="document-link")),能避免误抓其他无关链接。
  • 遵守网站规则:别频繁刷请求给服务器加压力,必要时在代码里加time.sleep(1)这类延迟;先看目标网站的robots.txt,别爬禁止抓取的内容。
  • 应对反爬:如果网站拦请求,可以把浏览器里的Cookie复制到代码的headers里,模拟已登录状态(如果需要登录才能访问PDF的话)。

要是你在具体操作中遇到问题——比如网页结构特殊、反爬拦截——随时把网页的相关HTML片段贴出来,我再帮你调代码!

火山引擎 最新活动