python-3.x - 在要抓取的网站上找不到 BeautifulSoup 的类名
问题描述
我是美丽汤的新手。
我正在尝试在下面的链接中获取“排名标准”类。不幸的是,我使用“标准”作为 soup_findAll() 的类,但它没有显示任何内容。我找不到任何其他可以给我想要的数据的班级名称(总分、学术声誉等)
我实际上想为多所大学做网络爬虫,所以我希望使用我可以为多所大学格式化的 URL(只需更改大学名称)。否则,我将只使用outerHTML(经过测试并且有效,但我不知道如何为多所大学定制)
我的代码如下。我最终使用了 get_text():
r = requests.get("https://www.topuniversities.com/universities/california-institute-technology-caltech")
html = r.text
soup = BeautifulSoup(html, 'html.parser')
tds = soup.get_text()
print(tds)
它并不成功,因为它有太多的东西让我很难评估我想要的信息。
任何帮助将不胜感激!谢谢!
解决方案
数据通过 JavaScript Ajax 请求动态加载。但是你可以使用requests
模块来模拟它。
例如:
import requests
from bs4 import BeautifulSoup
url = 'https://www.topuniversities.com/universities/california-institute-technology-caltech'
soup = BeautifulSoup( requests.get(url).content, 'html.parser' )
ajax_url = 'https://www.topuniversities.com' + soup.select_one('a.use-ajax')['href'].replace('nojs', 'ajax')
data = requests.post(ajax_url).json()
for d in data:
if 'data' in d:
soup = BeautifulSoup(d['data'], 'html.parser')
break
for div in soup.select('div.criteria'):
criteria = div.find(text=True).strip()
ranking = div.b.get_text(strip=True)
print('{:<30} {}'.format(criteria, ranking))
印刷:
Overall Score: 97
Academic Reputation: 97
Employer Reputation: 82.8
Faculty Student: 100
Citations per Faculty: 99.9
International Faculty: 100
International Students: 88.2
推荐阅读
- r - 我的代码返回单个值而不是向量
- angular - 生产构建 ng build --prod 时出现错误
- c# - 如何修复 Visual Studio 2019 中的错误 CS0246
- python - 如何通过请求下载文件而不是 HTML
- c# - 在构建游戏上托管比赛时,Unity UNET 网络服务器未激活
- codeblocks - 无法将 64 位 ftd2xx 静态库与项目显示链接器错误链接。如何将 ftd2xx 64 位库链接到代码
- c++ - 如何使用 C++ 在 openCV 中显示图像元数据?
- apache - 无法获取 nifi 中文件的文件行数
- ios - 尝试使用 Swift 使用从 Firestore 集合中检索到的数据填充 TableView,但它是空的
- sql - LIMIT 基于迄今为止 DISTINCT `foreign_key` 的 COUNT