HTML链接循环遍历代码修正:解决每次复用初始URL的问题
问题修正:循环获取页面第三个链接的代码问题
嘿,我终于搞懂你代码的问题啦!为啥每次都输出同一个链接?咱们来拆解下问题:
你的代码里的核心问题:
- 遍历a标签时乱改url:你在循环遍历所有a标签的时候,反复把
url赋值成每个标签的href,最后url会变成当前页面的最后一个链接,这完全是多余操作,还打乱了后续逻辑。 - 错误复用旧链接:你把所有页面的链接都塞进列表
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
相关产品推荐
相关产品推荐

