首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络抓取输出[]

网络抓取输出[]
EN

Stack Overflow用户
提问于 2021-08-26 16:12:04
回答 1查看 38关注 0票数 1

嘿,我只是想测试一下Python Webscraping,我不知道为什么它不能工作。作为输出,我变成了[],没有其他东西。有谁有主意吗?BEcause如果我到网站上搜索元素,我会找到它。

代码语言:javascript
复制
from bs4 import BeautifulSoup
import requests

html_text = requests.get("https://osu.ppy.sh/users/20488254").text
soup = BeautifulSoup(html_text, "lxml")
job = soup.find("div", class_ = "profile-detail__col profile-detail__col--bottom-right")
print(job)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 16:23:12

使用JS动态加载播放器信息。因此,您不能使用普通的bs4抓取动态内容。幸运的是,它们在脚本标记中以json格式提供用户信息。如果你打开页面源代码并查找json-user,你会看到有一个标签:

代码语言:javascript
复制
<script id="json-user" type="application/json">
{"avatar_url":"https:\/\/a.ppy.sh\/20488254?1622470835.jpeg","country_code":"AT","default_group":"default","id":20488254,...
</script>

您可以将json放在该标记中,并获取有关播放器的任何信息。下面是它看起来的样子:

代码语言:javascript
复制
import json
import requests
from bs4 import BeautifulSoup

html_text = requests.get("https://osu.ppy.sh/users/20488254").text
soup = BeautifulSoup(html_text, "lxml")

json_data = json.loads(soup.find('script', {'id':'json-user'}).string)

现在假设你正在寻找玩家的全球排名。您所需要做的就是找到正确的键来导航到那里:

代码语言:javascript
复制
player_rank = json_data['statistics']['global_rank']
# -> 199303
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68942011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档