在Google Colab爬取clutch.io数据:BS4与Selenium遇阻求助
解决Google Colab爬取clutch.io MSP板块的问题
一、requests+BeautifulSoup4拿不到数据的解决办法
clutch.io的MSP板块内容是动态渲染的,直接用requests请求只能拿到静态HTML骨架,实际商家数据是通过JavaScript加载的,所以BS4自然提取不到目标内容。
两种解决思路:
- 抓接口:打开浏览器F12→Network→XHR,刷新页面后找返回商家数据的接口(通常带
list、data这类关键词),复制接口URL、请求头(重点带User-Agent、Referer),用requests模拟请求直接拿JSON格式数据,比解析HTML效率高。 - 用动态渲染工具(比如Selenium),也就是你后续尝试的方案,下面重点说Colab里的正确配置。
二、Colab中Selenium的正确配置(解决Chrome二进制文件找不到的问题)
Colab默认没装Chrome浏览器,直接用ChromeDriverManager肯定找不到二进制文件,必须先安装Chromium浏览器,再指定路径:
完整可运行代码
# 1. 先安装Chromium浏览器 !apt-get update !apt-get install -y chromium-browser # 2. 安装依赖库 !pip install selenium webdriver-manager # 3. 配置并启动Selenium from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 设置Chrome选项,适配Colab环境 options = webdriver.ChromeOptions() options.add_argument('--headless') # 无头模式,适合无界面的Colab options.add_argument('--no-sandbox') # 禁用沙箱,Colab必需 options.add_argument('--disable-dev-shm-usage') # 解决Colab内存不足导致的崩溃问题 options.binary_location = '/usr/bin/chromium-browser' # 关键!指定Chromium的安装路径 # 初始化驱动 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 访问目标页面 driver.get('https://clutch.io/it-services/managed-service-providers') # 显式等待目标元素加载完成(比sleep更可靠) wait = WebDriverWait(driver, 15) wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.company_title a'))) # 提取商家名称示例 company_names = driver.find_elements(By.CSS_SELECTOR, '.company_title a') for name in company_names: print(name.text) # 关闭驱动 driver.quit()
核心注意点
- 必须指定
options.binary_location,Colab安装的Chromium固定在/usr/bin/chromium-browser路径 --disable-dev-shm-usage参数不能省,Colab的临时内存分区很小,不加会导致Chrome直接崩溃- 用显式等待代替
time.sleep(),确保数据加载完成再提取,避免空结果
三、反爬提示
clutch.io有反爬机制,频繁请求会被封IP,建议:
- 每次请求后加随机间隔(比如
time.sleep(random.randint(2,5))) - 每次请求更换
User-Agent - 必要时可以给Colab配置HTTP代理
内容的提问来源于stack exchange,提问作者zero
相关产品推荐
相关产品推荐

