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

