当我按类搜索时,为什么BeautifulSoup的findAll返回一个空列表?

2024-09-30 01:33:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用h2标记进行web抓取,但是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)

Tags: https标记web列表htmljobh2class
2条回答

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

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)

enter image description here

答案隐藏在两个因素中:

  1. javascript呈现内容:之后文档.onload在
  2. 尤其是js管理的内容是在这个评论之后,而且它确实是由js呈现的。块开始的行是:“<!--开始ICIM--->;“(添加空格以避免空白)

你可以想象h2^{cl1}$

解决方案? IMHO实现您想要的效果的最佳方法是使用selenium来获得完整的呈现的web页面。在

也检查一下这个 Web-scraping JavaScript page with Python

相关问题 更多 >

    热门问题