如何将Beautiful Soup查询结果存入数组并解决仅存单个元素问题
问题原因
你将urls = []数组初始化语句放在了循环内部的条件判断中,每次匹配到符合要求的链接时,都会先清空整个数组再添加新元素,最终数组中只会保留最后一次匹配到的内容。
修正代码
将数组初始化移到循环外即可,还可以用集合存储直接实现自动去重,省去后续单独处理去重的步骤:
match2 = soup.find_all("a", href=True, target="_blank") # 初始化放在循环外部,用集合存储可自动去重,需要转列表直接用list(urls)即可 urls = set() # 循环变量不要和原查询结果变量同名,避免覆盖原有查询结果 for item in match2: # 用startswith判断更安全,避免href为空时索引越界报错 if item['href'].startswith('.'): url_parts = url.split("/") href_parts = item['href'].split("/") imageUrl = f"{url_parts[2]}/{url_parts[3]}/src/{href_parts[-1]}" urls.add(imageUrl) print("array") for i in urls: print(i)
额外优化说明
- 避免循环变量和原查询结果变量重名,防止后续需要复用查询结果时出现异常
- 用
startswith('.')替代直接取下标判断,规避href为空时的索引越界风险 - 提前将url拆分结果存入变量,避免重复执行split操作提升运行效率
- 用集合存储数据天然支持去重,不需要额外编写去重逻辑
内容的提问来源于stack exchange,提问作者qwessin
相关产品推荐
相关产品推荐

