如何迭代处理网页数据函数解决Python爬取网页链接跳转问题
问题修复方案
现有代码的核心问题
- 循环内部每次都将
u重置为初始的Fikret页面链接,导致每次循环都从头开始跳转,无法继续向下迭代 - 使用全局列表
conec、conec2存储所有页面的链接,每次取第n-1位的索引时,取到的不是当前页面的对应位置链接,索引完全错位 - 定义了两个逻辑完全重复的爬取方法
conectar和new_page,一次循环内调用两次相当于每次循环跳转2次,和要求的循环一次跳转1次的逻辑不符 - 爬取页面链接时没有清空存储列表,每次都追加内容导致索引混乱
修复后代码
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 def get_target_link(url, position): html = urllib.request.urlopen(url, context=ctx).read() soup = BeautifulSoup(html, 'html.parser') tags = soup('a') # 直接返回当前页面第position-1个链接,不需要全局存储 return tags[position-1].get('href', None) # 获取输入参数 count = int(input('Enter count: ')) position = int(input('Enter position: ')) # 初始页面 current_url = 'http://py4e-data.dr-chuck.net/known_by_Fikret.html' # 循环跳转count次 for _ in range(count): current_url = get_target_link(current_url, position) # 从最终url提取姓名 final_name = current_url.split('_')[-1].replace('.html', '') print(f'最终姓名:{final_name}') print(f'最终链接:{current_url}')
运行验证
输入count=4、position=3后,会按顺序跳转4次,最终得到的姓名为Anayah,符合需求。
内容的提问来源于stack exchange,提问作者Esca01
相关产品推荐
相关产品推荐

