Python爬虫代码重复输出同一HTML链接问题排查与解决
问题诊断与解决方法
常见问题原因
- 未更新循环中的目标URL:这是最容易犯的错误。如果你的代码每次循环都只请求初始链接,而不是把上一次拿到的第18个链接作为新的请求地址,自然会反复爬同一个页面,输出同一个链接。
- 链接索引处理逻辑错误:要是代码里硬编码了初始页面的某个固定链接,而不是每次从新页面的链接列表里取索引17的元素,也会导致重复输出。
- 循环流程出错:比如循环次数没控制对,或者循环内部没按“请求页面→提取链接→更新URL”的顺序执行。
解决步骤
参考课程提供的代码框架,正确的执行流程应该是:
- 先设置好起始URL和7次循环次数。
- 每一轮循环都做这几件事:
- 向当前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
相关产品推荐
相关产品推荐

