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

HTML链接循环遍历代码修正:解决每次复用初始URL的问题

问题修正:循环获取页面第三个链接的代码问题

嘿,我终于搞懂你代码的问题啦!为啥每次都输出同一个链接?咱们来拆解下问题:

你的代码里的核心问题:

  1. 遍历a标签时乱改url:你在循环遍历所有a标签的时候,反复把url赋值成每个标签的href,最后url会变成当前页面的最后一个链接,这完全是多余操作,还打乱了后续逻辑。
  2. 错误复用旧链接:你把所有页面的链接都塞进列表l,然后每次都取l[2]——这可是初始页面的第三个链接啊!不管你后续爬了多少新页面,这个位置的内容永远是第一次的那个链接,难怪每次输出都一样。

修正后的代码

直接看改好的版本,逻辑简洁精准,完全符合你的需求:

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

# 起始URL
url = input('Enter URL: ')
if len(url) < 1:
    url = 'http://py4e-data.dr-chuck.net/known_by_Fikret.html'

# 重复执行4次(对应你要的4个输出结果)
for _ in range(4):
    # 打开当前URL并解析页面
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')
    # 提取所有a标签
    tags = soup('a')
    # 获取第3个a标签的链接(注意Python是0索引,所以用tags[2])
    next_link = tags[2].get('href', '')
    # 处理相对链接,确保生成完整可访问的URL
    next_link = urljoin(url, next_link)
    # 打印当前获取到的链接
    print(next_link)
    # 更新URL为下一次要访问的地址
    url = next_link

为啥这样改就对了?

  • 去掉了冗余的列表l:我们根本不需要保存所有链接,只需要每次更新下一个要访问的URL就行,省内存还清晰。
  • 精准定位第3个链接:直接用tags[2]获取当前页面的第三个a标签,不用遍历所有标签做无用功。
  • 处理相对链接:用urljoin把页面里的相对路径(比如/page.html)转换成完整的绝对URL,避免访问出错。

运行这个代码后,输出就会和你期望的完全一致:

http://py4e-data.dr-chuck.net/known_by_Montgomery.html
http://py4e-data.dr-chuck.net/known_by_Mhairade.html
http://py4e-data.dr-chuck.net/known_by_Butchi.html
http://py4e-data.dr-chuck.net/known_by_Anayah.html

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:44:09