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

如何用BeautifulSoup4匹配对应BEANS与SAUSAGES标签提取信息?

解决方案

直接利用BeautifulSoup的兄弟节点查找方法就能精准关联每个BEANS和紧随其后的SAUSAGES标签,核心思路是遍历所有BEANS标签,对每个标签直接定位它的下一个SAUSAGES兄弟节点,完全适配交替结构的场景。

完整实现代码

import os
import requests
from bs4 import BeautifulSoup

# 配置目标URL与根目录
TARGET_URL = "https://url.com"
ROOT_DIR = "C:/Root Dir Name"

# 获取并解析HTML内容
response = requests.get(TARGET_URL)
soup = BeautifulSoup(response.content, "html.parser")

# 定位外层无类名div(若页面有多个同类外层div,需补充更精准的选择器)
outer_div = soup.find("div", class_=None)

# 遍历所有BEANS标签
for beans_div in outer_div.find_all("div", class_="BEANS"):
    # 提取子目录名(自动去除首尾空白字符)
    subdir_name = beans_div.get_text(strip=True)
    # 找到当前BEANS紧随的SAUSAGES标签
    sausages_div = beans_div.find_next_sibling("div", class_="SAUSAGES")
    
    if not sausages_div:
        continue  # 若没有对应SAUSAGES标签则跳过
    
    # 遍历SAUSAGES内的所有下载链接
    for link in sausages_div.find_all("a", href=True):
        file_url = link["href"]
        # 从链接中提取文件名
        file_name = os.path.basename(file_url)
        # 拼接完整保存路径
        save_path = os.path.join(ROOT_DIR, subdir_name, file_name)
        
        # 自动创建子目录(不存在则生成)
        os.makedirs(os.path.dirname(save_path), exist_ok=True)
        
        # 下载并保存文件
        file_response = requests.get(file_url)
        with open(save_path, "wb") as f:
            f.write(file_response.content)

关键逻辑说明

  • 标签关联:beans_div.find_next_sibling("div", class_="SAUSAGES")会自动跳过中间的空白文本节点或无关元素,直接定位当前BEANS之后的第一个SAUSAGES标签,比手动遍历所有子元素更简洁可靠。
  • 路径处理:用os.path.join()拼接路径,避免手动写字符串出现的斜杠兼容问题;os.makedirs(..., exist_ok=True)确保子目录不存在时自动创建,无需额外判断。
  • 容错处理:增加if not sausages_div的判断,避免因HTML结构异常(比如末尾只有BEANS无SAUSAGES)导致的代码报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:58