使用BeautifulSoup爬取会员网址时for循环仅返回单个结果求助
问题核心原因
你代码的逻辑错误出在两处:
- 全局列表
lst3重复累加内容:你把所有会员页的链接都追加到同一个lst3里,只有第一次循环第一个会员页时,索引108对应的是当前页的目标链接;后续循环时lst3已经包含了之前所有页面的链接,索引108的内容早已不是当前页的目标值,甚至可能出现索引越界报错,导致只输出1个结果就终止运行。 - 硬编码索引取值逻辑极不稳定:固定取第108位链接的写法完全依赖页面当前的结构,只要页面调整、多/少一个链接,你拿到的结果就会出错。
修正方案
把最后一段循环逻辑调整如下:
url3 = lst2[4:18] print(url3) for x in url3: # 每次处理单个会员页时,单独初始化当前页的链接列表,不要用全局列表累加 current_page_links = [] html1 = urlopen(x).read() soup1 = BeautifulSoup(html1,"html.parser") for url4 in soup1.find_all('a'): href = url4.get('href') if not href: continue # 这里可以加筛选逻辑,比如排除mhi.org的站内链接,剩下的就是会员官网 if 'mhi.org' not in href and href.startswith('http'): print(href) # 也可以存到数据库或者其他列表里 break
如果你一定要用原有的索引逻辑,也至少要把lst3 = list()放到for x in url3的循环内部,每次循环都清空列表,避免内容累加。
内容的提问来源于stack exchange,提问作者hitesh goyal
相关产品推荐
相关产品推荐

