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

VS Code运行AHA临床指南网页抓取代码无输出问题咨询

网页抓取AHA临床指南无输出问题排查与解决

我尝试抓取美国心脏协会(AHA)官网的临床指南,运行代码后无报错,但VS Code的输出和终端窗口都没内容,终端仅返回文件所在文件夹路径。原代码如下:

import requests
from bs4 import BeautifulSoup
import sys

def get_clinical_guidelines():
"Returns a list of clinical guidelines from the American Heart Association website."

url = "https://professional.heart.org/en/guidelines-and-statements"
response = requests.get(url, timeout=5)
soup = BeautifulSoup(response.content, "html.parser")

guidelines = []
for guideline in soup.find_all("div", class_="row guideline-item"):
  title = guideline.find("h4").text
  link = guideline.find("a")["href"]
  guidelines.append({"title": title, "link": link})

return guidelines

def main():
guidelines = get_clinical_guidelines()
for guideline in guidelines:
print(f"Title: {guideline['title']}")
print(f"Link: https://professional.heart.org{guideline['link']}")

 if __name__ == "__main__":
 main()

get_clinical_guidelines()

问题原因分析

  1. 代码缩进错误:main函数内的print语句未缩进,if __name__ == "__main__"前有多余空格,导致代码逻辑无法正常执行。
  2. 选择器不匹配:原页面的指南条目DOM结构可能已变更,div.row guideline-item无法匹配到任何元素,返回空列表。
  3. 无请求头被反爬:直接用requests.get发起请求会被网站识别为爬虫,返回空内容或拦截请求。
  4. 无异常处理:请求失败或元素查找失败时没有提示,无法定位问题。

修正方案与代码

修正后的代码

import requests
from bs4 import BeautifulSoup

def get_clinical_guidelines():
    """Returns a list of clinical guidelines from the American Heart Association website."""
    url = "https://professional.heart.org/en/guidelines-and-statements"
    # 添加请求头模拟浏览器访问
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    try:
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()  # 检查请求是否成功
        soup = BeautifulSoup(response.content, "html.parser")
        
        guidelines = []
        # 调整选择器为页面实际的指南条目容器类名
        for guideline in soup.find_all("div", class_="guideline-item"):
            title_tag = guideline.find("h4")
            link_tag = guideline.find("a")
            # 避免找不到元素引发报错
            if title_tag and link_tag:
                title = title_tag.get_text(strip=True)
                link = link_tag["href"]
                guidelines.append({"title": title, "link": link})
        return guidelines
    except Exception as e:
        print(f"出错信息: {e}")
        return []

def main():
    guidelines = get_clinical_guidelines()
    if not guidelines:
        print("未找到任何临床指南条目")
        return
    for guideline in guidelines:
        print(f"Title: {guideline['title']}")
        print(f"Link: https://professional.heart.org{guideline['link']}\n")

if __name__ == "__main__":
    main()

关键修正点

  • 修复缩进问题,确保main函数逻辑和程序入口正常执行。
  • 添加请求头,模拟浏览器行为绕过基础反爬机制。
  • 增加异常捕获与元素存在性检查,避免无输出或报错。
  • 清理标题文本的多余空格,优化输出格式。
  • 增加空列表判断,提示未找到条目的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:45:23