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

使用BeautifulSoup爬取Indeed等网站仅返回JavaScript代码,是否需用Selenium?

问题解决思路

你遇到的是典型的*客户端渲染(CSR)*站点爬取场景:Indeed这类站点的核心内容不会直接放在首次返回的静态HTML里,而是通过JS执行后动态渲染到页面上的,你抓包拿到的那串JS代码就是负责渲染内容的逻辑,BeautifulSoup本身没有JS执行能力,所以只能拿到这串原始JS代码,拿不到最终渲染的业务内容。

方案1:仅靠BeautifulSoup也能完成,前提是你能抓到后端数据接口

  • 打开浏览器开发者工具的「网络」面板,刷新目标页面后筛选Fetch/XHR请求,逐一看响应内容,找到返回岗位、搜索结果等业务数据的后端接口
  • 直接用requests模拟请求这个接口,拿到结构化的JSON数据后,不需要解析HTML就能直接提取字段,效率远高于浏览器自动化方案
  • 注意:这类接口通常有请求头、参数签名、Cookie校验规则,你需要把你的请求参数、请求头全部和浏览器发起的请求对齐,同时处理UA伪装、请求频率限制等反爬规则即可。

方案2:接口逆向成本太高时,用Selenium/Playwright这类工具更省心

  • 如果你找不到可用的业务接口、或者接口的加密逻辑太复杂逆向成本过高,直接用浏览器自动化工具就能绕过JS逆向步骤:这类工具会启动真实的浏览器内核,自动执行页面的全部JS代码,等页面渲染完成后直接提取渲染好的完整DOM源码,再丢给BeautifulSoup做内容解析即可。
  • 简单实现示例:
from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 启动Chrome浏览器,也可以配置无头模式降低资源消耗
driver = webdriver.Chrome()
driver.get("目标Indeed页面的URL")
# 等待页面渲染完成,建议替换为显式等待定位目标元素,避免固定等待时间不够或者过长
time.sleep(3)
# 获取渲染完成的完整HTML源码
rendered_html = driver.page_source
soup = BeautifulSoup(rendered_html, "lxml")
# 后续即可正常使用BeautifulSoup的语法解析目标内容

注意事项

  • 无论采用哪种方案,都请遵守目标站点的robots.txt规则,合理控制请求频率,避免对站点服务造成压力,同时也能降低IP被封禁的概率。

内容的提问来源于stack exchange,提问作者Atif Shafi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:51:01