python - 当我按类搜索时,为什么 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)
解决方案
内容在 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)
推荐阅读
- python - 如何通过 PyQt5.uic 将 .ui 文件转换为 py?
- php - 如何通过 htaccess 作为 GET 参数重定向任何子域?
- laravel - 如何在 Laravel 中使用 eloquent 使用包含在数组字段中的搜索值
- reactjs - 为什么没有父路由渲染子路由不会渲染?
- c# - 无法读取文件 - ReadTimeout 和 WriteTimeout
- c# - .Net core 2.2 webap 无法解析网络标准 2 类库
- c# - 两个列表的数学计算
- python - 如何在 OpenCV 中检测数独网格板
- r - 使用 dplyr 将数据帧从宽转换为长
- react-native - 无法从操作创建者中分派异步操作