You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表添加元素及BeautifulSoup爬取链接去重与打印问题求助

嘿,我来帮你搞定这两个技术问题!

问题1:如何在Python中向列表添加元素?

Python里给列表加元素有好几种常用方法,按需选就行:

  • append():给列表末尾添加单个元素,比如 my_list.append("new_item"),这是最常用的方式
  • extend():把另一个可迭代对象(比如列表、元组)的所有元素一次性加到列表末尾,比如 my_list.extend([1,2,3])
  • insert():在指定索引位置插入元素,第一个参数是索引,第二个是元素,比如 my_list.insert(0, "first_item") 会把元素插到列表最前面
  • + 运算符:可以把两个列表拼接成一个新列表,比如 new_list = my_list + ["a", "b"],注意这会生成新列表,原列表不会改变
问题2:BeautifulSoup爬取链接的重复与打印问题

先看你代码里的核心问题:

  1. 重复链接的原因:你外层循环遍历的是cnnSectBulletItems类的div,但内层循环却用soup.find_all('a')——这会每次都搜索整个页面的所有a标签,所以每遍历一个div,就把全页面的链接再添加一遍,自然就重复了!应该改成在当前的div(也就是循环里的links变量)里找a标签。
  2. 打印相关问题:你现在每次添加一个链接就打印一次,加上重复的情况,会输出大量冗余内容。可以等收集完所有链接后再统一打印,或者在循环里先做去重判断。

给你修正后的代码:

from bs4 import BeautifulSoup
import requests

address = "http://transcripts.cnn.com/TRANSCRIPTS/2018.04.29.html"
page = requests.get(address)
soup = BeautifulSoup(page.content, 'html.parser')
articles = []

# 外层循环遍历目标div,内层在当前div范围内找a标签
for section in soup.find_all('div', {'class':'cnnSectBulletItems'}):
    for link in section.find_all('a'):
        article_href = link.get('href')
        # 先判断链接是否已存在,避免重复添加
        if article_href not in articles:
            articles.append(article_href)

# 收集完成后统一打印所有链接
for article in articles:
    print(article)

解释下改动点:

  • 把内层的soup.find_all('a')改成section.find_all('a'),只在当前的目标div里搜索链接,避免全局重复抓取
  • 添加了if article_href not in articles的判断,确保每个链接只被添加一次
  • 把打印语句移到循环外面,等所有链接收集完再统一打印,输出更整洁

内容的提问来源于stack exchange,提问作者hard1009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:44:03