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

如何用BeautifulSoup查找嵌套元素?爬取Medline产品链接遇阻求助

解决Medline产品链接爬取返回None的问题

我明白你遇到的问题了——你已经定位到了包含产品标题的div.medGridProdTitle元素,但直接从这个div获取href肯定会返回None,因为href属性是属于div内部的<a>标签的,而不是div本身。

下面是具体的修改方案,分两种清晰的思路:

思路1:直接定位目标<a>标签

你可以直接用BeautifulSoup的CSS选择器,查找所有属于medGridProdTitle类div下的<a>标签,这样就能直接获取到href属性:

import requests
import xlsxwriter
from bs4 import BeautifulSoup

def cpap_spider(max_pages):
    row_i = 0  # 建议避免使用global,直接在函数内初始化更规范
    page = 0
    base_url = "https://www.medline.com"  # 用来拼接相对链接为完整URL
    while page <= max_pages:
        url = f"https://www.medline.com/catalog/category-products.jsp?No={page}&itemId=Z05-CA11_07_03&N=104048&iclp=Z05-CA11_07_03"
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, 'html.parser')
        # 直接定位div.medGridProdTitle下的a标签
        for link in soup.select("div.medGridProdTitle a"):
            href = link.get("href")
            # 处理相对链接,转成可直接访问的绝对链接
            full_href = base_url + href if href.startswith('/') else href
            title = link.get_text(strip=True)  # 提取标签内文本并去除多余空格
            print(full_href)
            # print(title)
        page += 12

cpap_spider(156)

思路2:先找div再定位内部的a标签

如果你还是想先找到div元素,可以在找到div后,用.find('a')方法获取其内部的a标签:

# 替换原代码中的循环部分
for div in soup.findAll("div", {"class":"medGridProdTitle"}):
    a_tag = div.find('a')
    if a_tag:  # 增加判断,避免部分div无a标签导致报错
        href = a_tag.get("href")
        full_href = base_url + href if href.startswith('/') else href
        title = a_tag.get_text(strip=True)
        print(full_href)
        # print(title)

关键注意点

  • 相对链接处理:网站返回的href大概率是相对路径(比如/catalog/product/xxx),必须和网站的base URL拼接成完整的绝对链接,否则无法直接访问。
  • 异常防护:添加if a_tag:的判断,可以避免因页面结构异常(比如某个div里没有a标签)而抛出AttributeError。
  • 文本提取优化:用link.get_text(strip=True)比link.string更可靠——如果标签内有嵌套元素,string会返回None,而get_text()能提取所有文本内容并自动去除多余空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:42:29