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

使用BeautifulSoup批量爬取Kickstarter多URL遇URL加载问题求助

解决从TXT加载Kickstarter URL时的爬取失效问题

嗨,我之前做网页爬取时也碰到过类似的从文本文件加载URL就失效的情况,大概率是TXT里的URL格式有问题或者读取方式没处理好空白字符,咱们一步步排查解决:

可能的问题根源

  • TXT文件里的URL末尾藏着看不见的换行符\n、空格或者制表符,导致请求的URL无效
  • 读取文件时直接把整行内容(包括换行符)当作URL传入,请求了错误的地址
  • TXT里的URL格式不统一,比如有的缺https://前缀,或者存在拼写错误

分步解决方案

1. 先规范TXT文件的URL格式

确保每个URL单独占一行,没有多余空格,示例格式如下:

https://www.kickstarter.com/projects/xxx/project-1
https://www.kickstarter.com/projects/yyy/project-2

2. 正确读取TXT中的URL

读取时一定要去除每行的空白字符(换行、空格等),同时跳过空行,示例代码:

from bs4 import BeautifulSoup
import requests

# 从TXT加载URL列表的函数
def load_urls(file_path):
    url_list = []
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            # 去除前后空白,跳过空行
            clean_url = line.strip()
            if clean_url:
                url_list.append(clean_url)
    return url_list

# 爬取奖励档位及支持者数的核心函数
def scrape_rewards(url):
    # 加请求头避免被反爬拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    try:
        resp = requests.get(url, headers=headers)
        resp.raise_for_status()  # 捕获HTTP请求错误
        soup = BeautifulSoup(resp.text, 'html.parser')
        
        reward_data = []
        # 定位奖励档位容器(Kickstarter的奖励档通常用pledge__reward类)
        reward_items = soup.find_all('div', class_='pledge__reward')
        for item in reward_items:
            # 提取奖励金额
            amount = item.find('span', class_='pledge__amount').get_text(strip=True) if item.find('span', class_='pledge__amount') else '未知金额'
            # 提取支持者数量
            backers = item.find('span', class_='pledge__backer-count').get_text(strip=True) if item.find('span', class_='pledge__backer-count') else '未知支持者数'
            reward_data.append({
                '档位金额': amount,
                '支持者数': backers
            })
        return reward_data
    except Exception as e:
        print(f"爬取{url}失败: {str(e)}")
        return []

# 主执行流程
if __name__ == '__main__':
    urls = load_urls('kickstarter_urls.txt')
    # 先验证加载的URL是否正确
    print("加载的URL列表:")
    for u in urls:
        print(u)
    
    # 批量爬取
    for url in urls:
        print(f"\n=== 正在爬取项目:{url} ===")
        rewards = scrape_rewards(url)
        for idx, r in enumerate(rewards, 1):
            print(f"档位{idx}:{r['档位金额']} | 支持者数:{r['支持者数']}")

3. 验证加载的URL有效性

在爬取前先打印加载的URL列表,确认每个地址都是正确的,避免因为URL错误导致爬取失败。

额外提示

  • Kickstarter有反爬机制,一定要加User-Agent请求头,不然很容易被封禁IP
  • 如果后续页面结构变化,需要用浏览器开发者工具重新定位奖励档位的HTML元素类名或标签
  • 你提供的示例数据(比如Pledge CA$ 500 or more About €325)就是奖励金额部分,用上面的代码可以同时提取对应的支持者数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:24:11