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

Beautiful Soup无法找到页面中存在的HTML元素求助

Netflix招聘页面爬取问题

我在爬取Netflix招聘页面时遇到了问题,页面地址为https://jobs.netflix.com/search,使用以下代码时,最后一行的find_all返回空结果:

url = "https://jobs.netflix.com/search"

response=requests.get(url)
response = response.content
soup= BeautifulSoup(response, 'html.parser')

jobList = soup.find_all("div", {"class" : "css-160787d exb5qdx0"})

我确认请求返回的内容正常,尝试过find和find_all都无效,原本以为网站不是动态页面,考虑用Selenium但不确定是否必要,不清楚问题出在哪。

可能的原因及解决办法

  • 动态生成的CSS类名不可靠:你使用的css-160787d exb5qdx0这类带随机字符的类名,大概率是React等前端框架动态生成的,页面刷新后类名会变化,直接用这类类名定位元素自然无效。
  • 换用稳定的定位方式:
    1. 查看页面HTML结构,优先选择带有data-testid这类测试属性的元素,或者层级稳定的标签结构来定位。比如Netflix招聘页面的职位列表通常会有固定的父容器标识。
    2. 示例调整代码(以实际页面结构为准):
      headers = {
          "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
      }
      response=requests.get(url, headers=headers)
      soup= BeautifulSoup(response.text, 'html.parser')
      # 先定位稳定的结果容器
      result_container = soup.find("div", {"data-testid": "search-results"})
      # 再在容器内遍历职位项
      jobList = result_container.find_all("div", class_="css-1u7zfla")
      
  • 检查反爬拦截:即使你认为返回内容正常,也可以打印response.text确认是否是完整页面。很多网站会拦截无UA的请求,添加标准的请求头能避免这种情况。
  • 确认页面是否存在动态加载:部分页面看似静态,但职位数据是通过AJAX接口异步加载的。打开浏览器开发者工具的Network标签,刷新页面后查看XHR请求,若发现返回职位数据的接口,直接请求该接口会更高效,无需解析HTML。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:24:55