Html Soup.find_全部返回空列表

Html Soup.find_全部返回空列表,html,python-3.x,web-scraping,beautifulsoup,Html,Python 3.x,Web Scraping,Beautifulsoup,我正试图使用请求和美化小组为NBA统计数据创建一个球员统计表,但我得到的响应与使用“Inspect Element”时看到的不同 包含此表的div具有class属性:class=“nba-stat-table\uu overflow。但是,每当我运行以下代码时,都会得到一个空列表: table=soup.find_all('div',attrs={'class=“nba-stat-table_uoverflow'}) 这是我的全部代码: 导入操作系统 作为pd进口熊猫 将numpy作为np导入

我正试图使用
请求和
美化小组
为NBA统计数据创建一个球员统计表,但我得到的响应与使用“Inspect Element”时看到的不同

包含此表的
div
具有class属性:
class=“nba-stat-table\uu overflow
。但是,每当我运行以下代码时,都会得到一个空列表:

table=soup.find_all('div',attrs={'class=“nba-stat-table_uoverflow'})
这是我的全部代码:

导入操作系统
作为pd进口熊猫
将numpy作为np导入
从bs4导入BeautifulSoup
导入请求
url='1〕https://stats.nba.com/players/boxscores/?Season=2018-19和季节类型=常规%20季节'
response=requests.get(url)
soup=BeautifulSoup(response.content,'html.parser')
table=soup.find_all('div',attrs={'class=“nba-stat-table_uuoverflow'})

基本上,页面是通过
JavaScript
加载的,因此
bs4
请求
模块将无法动态呈现
JavaScript

您应该使用
selenium
requests_html
模块来呈现
JS
,但我注意到该网站正在使用
API
,可以用来获取数据,所以我调用了它并提取了数据

查看我的上一篇文章,它为您解释了如何获取
API

导入请求
作为pd进口熊猫
参数={
“计数器”:“1000”,
“DateFrom”:“,
“日期”:“日期”,
“方向”:“描述”,
“LeagueID”:“00”,
“PlayerOrTeam”:“P”,
“季节”:“2018-19”,
“季节类型”:“常规季节”,
“分拣机”:“日期”
}
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:75.0)Gecko/20100101 Firefox/75.0”,
“x-nba-stats-origin”:“stats”,
“x-nba-stats-token”:“真”,
“推荐人”:https://stats.nba.com/players/boxscores/?Season=2018-19和季节类型=常规%20季节”
}
def主(url):
r=requests.get(url,params=params,headers=headers).json()
目标=[]
对于r['resultSets']中的项:
df=pd.DataFrame(项['rowSet'],列=项['headers'])
目标.附加(df)
新=pd.concat(目标)
打印(新)
新建.to_csv(“data.csv”,index=False)
主要(”https://stats.nba.com/stats/leaguegamelog")
输出:


基本上,页面是通过
JavaScript
加载的,因此
bs4
请求
模块将无法动态呈现
JavaScript

您应该使用
selenium
requests_html
模块来呈现
JS
,但我注意到该网站正在使用
API
,可以用来获取数据,所以我调用了它并提取了数据

查看我的上一篇文章,它为您解释了如何获取
API

导入请求
作为pd进口熊猫
参数={
“计数器”:“1000”,
“DateFrom”:“,
“日期”:“日期”,
“方向”:“描述”,
“LeagueID”:“00”,
“PlayerOrTeam”:“P”,
“季节”:“2018-19”,
“季节类型”:“常规季节”,
“分拣机”:“日期”
}
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:75.0)Gecko/20100101 Firefox/75.0”,
“x-nba-stats-origin”:“stats”,
“x-nba-stats-token”:“真”,
“推荐人”:https://stats.nba.com/players/boxscores/?Season=2018-19和季节类型=常规%20季节”
}
def主(url):
r=requests.get(url,params=params,headers=headers).json()
目标=[]
对于r['resultSets']中的项:
df=pd.DataFrame(项['rowSet'],列=项['headers'])
目标.附加(df)
新=pd.concat(目标)
打印(新)
新建.to_csv(“data.csv”,index=False)
主要(”https://stats.nba.com/stats/leaguegamelog")
输出:


谢谢你的解决方案,Ahmed,但是你能解释一下为什么我的代码不起作用吗?以及你的代码是如何工作的吗?你能分享一个链接,让我学习更多的刮削吗?请解释一下为什么我会得到一个空列表?因为我看了很多关于刮削的视频教程,做了完全相同的事情,但即使我就像刮削腐烂的动物一样。com@ShantanuBisht答案已更新。如果我的答案对你有帮助,请随意回答。@Ahmed非常感谢,很抱歉让你提问题,但你能告诉我如何知道该网站是否通过javascript和API加载吗?@ShantanuBisht欢迎,阅读该答案,你会明白谢谢你的解决方案关于艾哈迈德,你能解释一下为什么我的代码不起作用吗?你的代码是如何工作的?你能分享一个链接让我学习更多的刮削吗?请解释一下为什么我会得到一个空列表?因为我看了很多关于刮削的视频教程,做了完全相同的事情,但即使在我刮削Rottomatos的时候也得到了一个空列表。com@ShantanuBisht答案已更新。如果我的答案对您有帮助,请随意回答。@Ahmed非常感谢,很抱歉让您提问题,但您能告诉我如何知道该网站是否通过javascript和API加载吗?@ShantanuBisht欢迎您,阅读该答案,您会理解的