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

Python爬虫代码重复输出同一HTML链接问题排查与解决

问题诊断与解决方法

常见问题原因

  • 未更新循环中的目标URL:这是最容易犯的错误。如果你的代码每次循环都只请求初始链接,而不是把上一次拿到的第18个链接作为新的请求地址,自然会反复爬同一个页面,输出同一个链接。
  • 链接索引处理逻辑错误:要是代码里硬编码了初始页面的某个固定链接,而不是每次从新页面的链接列表里取索引17的元素,也会导致重复输出。
  • 循环流程出错:比如循环次数没控制对,或者循环内部没按“请求页面→提取链接→更新URL”的顺序执行。

解决步骤

参考课程提供的代码框架,正确的执行流程应该是:

  1. 先设置好起始URL和7次循环次数。
  2. 每一轮循环都做这几件事:
    • 向当前URL发请求,拿到页面内容。
    • 用BeautifulSoup解析页面,把所有<a>标签的链接提取出来形成列表。
    • 从列表里取索引为17的链接(也就是第18个),把这个链接设为下一轮循环的目标URL。
    • 最后一轮循环结束后,输出这个最终链接。

修正后的核心代码示例

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

# 忽略SSL证书验证错误
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# 初始配置
url = 'http://py4e-data.dr-chuck.net/known_by_Armen.html'
loop_times = 7

for _ in range(loop_times):
    # 请求当前页面
    html = urllib.request.urlopen(url, context=ctx).read()
    soup = BeautifulSoup(html, 'html.parser')
    # 提取所有<a>标签的链接
    link_list = soup('a')
    # 更新URL为当前页面的第18个链接(索引17)
    url = link_list[17].get('href')
    # 可选:打印每一步的链接,验证流程是否正确
    print(f"当前跳转链接:{url}")

# 输出最终结果
print(f"最终目标链接:{url}")

关键注意点

  • 必须在每次循环里更新url变量,用新页面提取到的链接替换旧的,这样下一轮才会请求新页面。
  • 确认每个页面的链接数量足够:如果遇到索引错误,说明当前页面的<a>标签不足18个,不过Coursera的题目页面应该不会出现这种情况。
  • 别在循环里重新赋值初始URL,比如不小心又写了url = '初始链接',这会直接覆盖掉更新后的地址,导致循环原地踏步。

内容的提问来源于stack exchange,提问作者Vinh Nguyễn Thành

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:27