首页 > 解决方案 > 当我按类搜索时,为什么 BeautifulSoup 的 findAll 返回一个空列表?

问题描述

我正在尝试使用 h2 标签进行网络抓取,但 BeautifulSoup 返回一个空列表。

<h2 class="iCIMS_InfoMsg iCIMS_InfoField_Job">

html=urlopen("https://careersus-endologix.icims.com/jobs/2034/associate-supplier-quality-engineer/job")
bs0bj=BeautifulSoup(html,"lxml")
nameList=bs0bj.findAll("h2",{"class":"iCIMS_InfoMsg iCIMS_InfoField_Job"})
print(nameList)

标签: pythonweb-scrapingbeautifulsoup

解决方案


内容在 iframe 内并通过 js 更新(因此不存在于初始请求中)。您可以使用页面用于获取 iframe 内容(iframe src)的相同链接。然后从包含信息的脚本标签中提取字符串并加载json,提取description(即html)并传回bs以选择h2标签。如果需要,您现在也将其余信息存储在第二个汤对象中。

import requests
from bs4 import BeautifulSoup as bs
import json

r = requests.get('https://careersus-endologix.icims.com/jobs/2034/associate-supplier-quality-engineer/job?mobile=false&width=1140&height=500&bga=true&needsRedirect=false&jan1offset=0&jun1offset=60&in_iframe=1')
soup = bs(r.content, 'lxml')
script = soup.select_one('[type="application/ld+json"]').text
data = json.loads(script)
soup = bs(data['description'], 'lxml')
headers = [item.text for item in soup.select('h2')]
print(headers)

在此处输入图像描述


推荐阅读