我正在尝试使用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)
答案 0 :(得分:1)
内容位于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)
答案 1 :(得分:0)
答案隐藏在两个元素中:
您可以想象,当您调用bs4方法时,h2 class =“ ICISM class here”不存在。
解决方案? 恕我直言,实现所需目标的最佳方法是使用硒,以获得完整的渲染网页。