使用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
相关产品推荐
相关产品推荐

