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

Python列表取值问题:YouTube爬虫Tuple存储Twitter链接重复如何解决

问题根源

你使用了全局的twitter_list变量存储链接,该变量不会在每次处理新视频前重置,会持续累加所有视频提取到的Twitter链接;同时列表是Python中的可变对象,存入元组的是列表的内存引用,所有元组条目都会指向同一个全局列表,因此都会显示所有历史抓取的链接。

修复思路
  1. 移除全局的twitter_list变量,避免全局状态污染
  2. 改造get_links函数,让它直接返回当前视频对应的Twitter链接列表,不操作全局变量
  3. 每次处理单个视频时,接收get_links返回的当前视频链接列表,直接存入当前的元组即可
完整修改后代码
from __future__ import unicode_literals
import youtube_dl
import pandas as pd
import csv
import re

# read the csv file
number_of_rows = pd.read_csv('single.csv')

# Initialize YouTube-DL Array
ydl_opts = {}
all_scrapes = []
# 移除全局的twitter_list变量

# Scrape Online Product
def run_scraper():
    # Read CSV to List
    with open("single.csv", "r") as f:
        csv_reader = csv.reader(f)
        next(csv_reader)
        
        # Scrape Data From Store
        for csv_line_entry in csv_reader:
            with youtube_dl.YoutubeDL(ydl_opts) as ydl:
                meta = ydl.extract_info(csv_line_entry[0], download=False)
                channel = meta['channel']
                title = meta['title']
                description = meta['description']
                print('Channel        :', channel)
                print('Title          :', title)

                # 接收当前视频的twitter链接列表
                current_twitter_links = get_links(description)
                print("-" * 120)
                print()
                print('Demo:', current_twitter_links)

            # 存入当前视频对应的链接列表
            current_scrapes = (channel, title, current_twitter_links)
            all_scrapes.append(current_scrapes) 

        print('All Scrapes:', all_scrapes)
        print()


def get_links(description):
    # 初始化当前视频的twitter链接列表
    twitter_list = []
    # Find URLs in description
    description_urls = re.findall(r'(https?://[^\s]+)', description)

    # Twitter Resources
    if 'twitter.com' in description:
        for item in description_urls:
            if 'twitter.com' in item:
                print('- Twitter URL Found:', item)
                twitter_list.append(item)
    # 返回当前视频的链接列表
    return twitter_list


run_scraper()
补充说明

如果不想改造get_links函数,也可以选择在每次循环开始时清空全局twitter_list,但不推荐这种写法,全局变量容易引发意料之外的状态问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:48:05