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

使用BeautifulSoup的find_all()爬取Indeed职位页面返回空列表的问题求助

使用BeautifulSoup的find_all()爬取Indeed职位页面返回空列表的问题求助

嘿,我之前爬Indeed的时候也碰到过一模一样的问题,咱们一步步来排查和解决:

首先,先确认核心问题:你看到的源码和requests拿到的内容可能不一样!

浏览器里的“查看页面源码”其实是JS渲染完成后的完整页面,但requests.get()只能获取服务器初始返回的静态HTML——Indeed很多职位卡片是通过JavaScript动态加载的,所以你在浏览器里看到的那些cardOutline tapItem fs-unmask result类的div,很可能根本不在page.content里。

你可以先做个简单验证:把page.content写入一个本地HTML文件,打开看看有没有职位卡片:

with open("indeed_page.html", "w", encoding="utf-8") as f:
    f.write(page.text)

打开这个文件,如果看不到职位,那就是动态加载的问题了。

解决办法分两种情况:

情况1:静态HTML里其实有元素,只是class匹配有问题

有时候Indeed的class名可能有细微变化,或者你复制的class组合不对。试试以下几种匹配方式:

  • 只匹配最稳定的单个类(比如tapItem或者result):
results = soup.find_all('div', class_="tapItem")
  • 使用正则表达式匹配部分类名:
import re
results = soup.find_all('div', class_=re.compile(r'tapItem'))

情况2:确实是动态加载导致的

这时候requests+BeautifulSoup就不够用了,需要用能渲染JS的工具,比如Selenium:

  1. 先安装Selenium:pip install selenium,然后下载对应浏览器的驱动(比如ChromeDriver)
  2. 示例代码:
from selenium import webdriver
from bs4 import BeautifulSoup

url = "https://nl.indeed.com/jobs?q=python+developer&l=Amsterdam&vjk=b073fb1938c41557"
driver = webdriver.Chrome()  # 确保驱动路径正确
driver.get(url)

soup = BeautifulSoup(driver.page_source, 'html.parser')
results = soup.find_all('div', class_="cardOutline tapItem fs-unmask result")
print(results)

driver.quit()

额外小技巧:添加请求头模拟浏览器

有时候Indeed会拦截无请求头的爬虫,给requests.get()加上User-Agent试试:

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"
}
page = requests.get(url, headers=headers)

先试试这些方法,应该能解决你的问题!

备注:内容来源于stack exchange,提问作者mustapha imam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:40:30