繁体   English   中英

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

[英]Why is BeautifulSoup's findAll returning an empty list when I search by class?

我正在尝试使用 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)

在此处输入图片说明

答案隐藏在两个要素中:

  1. javascript 渲染内容:在 document.onload 之后
  2. 特别是由 js 管理的内容出现在此评论之后,并且确实由 js 呈现。 块开始的行是:“< ! - -BEGIN ICIMS - - >”(添加空格以避免它变成空白)

正如您可以想象的那样,当您调用 bs4 方法时,h2 class="ICISM class here" 不存在。

解决方案? 恕我直言,实现您想要的最佳方式是使用硒,以获得完整呈现的网页。

用 Python也检查这个Web-scraping JavaScript 页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM