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

WebScraping问题:爬取Twitch时soup.find()始终返回None求解答

嘿,我帮你捋清楚这个问题哈~

问题根源分析

Twitch的核心页面内容大多是JavaScript动态渲染出来的!你用requests.get()拿到的只是网站初始的静态HTML框架,那些你在浏览器里能看到的side-nav-card__link这类元素,其实是页面加载完成后由JS动态生成并插入DOM的——所以哪怕你打印soup能看到部分内容,也只是没有动态数据的空壳,BeautifulSoup自然找不到目标元素,换解析器当然解决不了这个问题。

可行解决方案

针对动态渲染的页面,你有两个适合练习的方向:

1. 用浏览器自动化工具模拟真实加载(推荐练手)

用Selenium或Playwright这类工具模拟浏览器打开页面,等JS完全渲染后再抓取内容。这里给你一个Selenium的示例代码:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

URL = 'https://www.twitch.tv'
# 配置Chrome无头模式(不想弹出浏览器窗口就启用)
chrome_options = Options()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36')

driver = webdriver.Chrome(options=chrome_options)
driver.get(URL)

# 等待目标元素加载完成,最多等10秒
try:
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'side-nav-card__link'))
    )
    # 获取JS渲染后的完整页面源码
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'lxml')
    
    offline = soup.find('a', {'class':'side-nav-card__link'})
    spans = soup.find_all('a')
    for span in spans:
        print(span)
    print(offline)
finally:
    driver.quit()

2. 抓取页面的AJAX接口(进阶技巧)

打开浏览器开发者工具(F12)切换到Network标签,刷新页面后观察XHR/fetch请求,找到Twitch用来加载动态内容的接口,直接请求这些接口拿数据。这种方式效率更高,还能锻炼你分析网络请求的能力。

适合练习的WebScraping项目推荐

既然你想专注练手,给你几个不错的选题:

  • 静态博客/新闻站:比如爬取Medium公开文章、新闻站点的列表页,练BeautifulSoup基础解析
  • 小型电商页面:提取商品名称、价格、图片链接,练习结构化数据抓取
  • 论坛板块:比如Reddit公开板块的帖子标题、作者、点赞数(记得遵守网站robots协议)
  • 天气网站:爬取本地未来一周的天气预报,练习解析表格类内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:02:30