爬取Angel.co初创企业列表数据失败,求可行解决方案
问题核心原因
- Angel.co的初创企业列表是前端JavaScript动态渲染生成的,电子表格自带的
IMPORTXML、IMPORTHTML仅支持读取静态HTML内容,无法执行JS加载动态数据,因此会返回空结果。 - 你编写的Python代码存在两处核心错误:一是目标URL返回的是HTML文本而非JSON格式,直接调用
.json()方法会直接抛出解析异常;二是用正则匹配HTML结构容错率极低,站点DOM结构稍有变动就会匹配失效。 - 该站点有完善的反爬策略,普通静态请求很容易被拦截,返回空内容或人机验证页面。
可行实现方案
使用支持动态页面渲染的自动化浏览器工具Playwright实现数据抓取,操作步骤如下:
- 先安装依赖包:
pip install playwright pandas playwright install chromium
- 运行以下代码即可抓取数据并导出为CSV格式的电子表格:
import pandas as pd from playwright.sync_api import sync_playwright # 目标页面地址 TARGET_URL = "https://angel.co/social-network-2" result = [] with sync_playwright() as p: # 启动浏览器,可将headless改为False查看运行过程 browser = p.chromium.launch(headless=True) page = browser.new_page(user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") page.goto(TARGET_URL, timeout=60000) # 等待列表元素加载完成 page.wait_for_selector(".startup-item", timeout=30000) # 滚动加载全部数据(按需调整滚动次数) for _ in range(5): page.evaluate("window.scrollTo(0, document.body.scrollHeight)") page.wait_for_timeout(2000) # 提取目标字段 items = page.locator(".startup-item").all() for item in items: try: name = item.locator(".uni-link").inner_text().strip() location = item.locator(".location").inner_text().strip() category = item.locator(".category").inner_text().strip() result.append({ "初创企业名称": name, "地点": location, "分类": category }) except: continue browser.close() # 导出为CSV文件 df = pd.DataFrame(result) df.to_csv("angel_co_social_startups.csv", index=False, encoding="utf-8-sig")
注意事项
- 代码中的选择器(
.startup-item、.location等)可根据站点实际DOM结构调整,打开浏览器F12开发者工具即可查看元素类名。 - 可适当调整滚动次数和等待时长,确保所有数据都加载完成。
- 若遇到人机验证,可将
headless改为False,手动完成验证后程序会继续执行。
内容的提问来源于stack exchange,提问作者vish
相关产品推荐
相关产品推荐

