python - 不使用 beautifulsoup 抓取网站数据
问题描述
这是我第三次或第四次使用 BeautifulSoup。我将它与 requests lib 一起使用以从体育网站上抓取数据。我正在尝试抓取运动员的信息,例如姓名、年龄、身高等。但是,在尝试获取 info(print(player_name)) 时,我得到的是这个,而不是网站页面中显示的内容:
姓名:{{details.player.person.lastName}},{{details.player.person.firstName}}
有什么方法可以访问真实数据吗?
我的代码:
import requests
from bs4 import BeautifulSoup
def scrape_player(player_url):
response_player = requests.get(player_url)
player_soup = BeautifulSoup(response_player.text, 'html.parser')
div = player_soup.find('div', {'class' : 'player-info-row'})
player_name = div.text
print(player_name)
if __name__ == '__main__':
scrape_player('https://ehfcl.eurohandball.com/men/20212/player/LFpFsiLDFvxs_tXnKlFAQw/luis-frade/')
解决方案
网站从脚本标签加载数据,因此它是动态加载的,并且bs4
无法通过标签或类进行捕获,但尽管它存在于script
标签中
import requests
from bs4 import BeautifulSoup
url = "https://ehfcl.eurohandball.com/men/2021-22/player/Z8PG_QqFxhA-6PTQ4gcCSA/stas-skube/"
r = requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
在这里,我们可以找到script
标签并将数据加载为 json 格式,将数据作为键值对返回,您可以提取您想要的数据!
data=soup.find("script",attrs={"type":"application/ld+json"})
import json
main_data=json.loads(data.string)
print(main_data['name'])
print(main_data['birthDate'])
输出:
Skube Stas
1989-11-15
推荐阅读
- terraform - 我可以使用 terraform 来管理新发布的 AWS ECS 自动缩放吗?
- javascript - 我想以垂直顺序打印一个字符串数组, const myArr = ['Google', 'Dell','Atlas'];
- r - 如何使用 ggsignif 将 ANOVA 单向 p 值添加到 ggplot
- asp.net - 删除数据表上的特定文本
- python - 无法在 ubuntu 上迁移项目
- javascript - 通过 props 将数据传递给自定义的 mat-grid 组件
- python - 在 python 中将 RAW 图像转换为 TIFF 但保留元数据
- vue.js - 如何同时使用 v-slot:item 和 v-slot:item。
在 Vuetify 数据表中? - swift - Swift - 在下载之前从服务器检查文件大小会导致应用程序延迟
- r - 获取最多 3 个数字并使用相应的名称