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

BeautifulSoup如何从CNN印尼站新冠搜索结果页提取所有文章链接?

问题分析
  • 变量名错误:代码中将a标签查找结果赋值给了a_cont变量,但后续取href属性时误用了未定义的a变量;同时判断条件使用了完全未定义的url变量,逻辑无法正常执行。
  • DOM选择器错误:嵌套查找层级过于冗余,且多个类名和目标页面实际DOM结构不匹配,导致始终找不到对应的文章元素,最终返回空列表。
  • 缺少请求头伪装:站点会校验请求的User-Agent,无合法UA的请求可能被拦截,返回异常页面导致解析失败。
  • 缺少请求状态校验:未判断请求返回状态码,若请求本身失败(如403、500错误),直接解析响应内容也无法得到有效结果。
修复后可运行代码
import requests
from bs4 import BeautifulSoup as bs

links = []
# 配置请求头伪装成浏览器
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
response = requests.get("https://www.cnnindonesia.com/search?query=covid", headers=headers)

# 先校验请求是否成功
if response.status_code == 200:
    soup = bs(response.text, 'html.parser')
    # 直接定位所有搜索结果的article标签,避免冗余嵌套查找带来的不稳定问题
    article_list = soup.find_all('article')
    for article in article_list:
        a_tag = article.find('a', href=True)
        if a_tag:
            links.append(a_tag['href'])

print(links)
补充说明
  • 如果解析结果仍为空,可以将解析器替换为容错率更高的lxml,替换方式为:soup = bs(response.text, 'lxml'),使用前需执行pip install lxml安装对应依赖。
  • 该站点搜索结果为分页加载,上述代码仅能获取第一页的文章链接,如需爬取全量数据需要构造分页参数请求后续页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:02