我正在从这个网站解析数据。我已经解析了该站点的多个内容,但出于某种原因,这个特定页面无法找到其中的一个表格。以下是演示问题的简化代码片段:
代码能够顺利找到滑冰者和守门员的表格,但是找不到“_adv”表格,导致出现NoneType错误,因为找不到该表格。我可以找到“_adv”所在节点。
#!/usr/bin/env python3
import bs4 as bs
import requests
def get_soup(site):
headers = {'User-Agent': 'Mozilla/5.0'}
r = requests.get(site, headers=headers)
#Always want a status code of 200, which means everything downloaded
if r.status_code != 200:
print(r.status_code)
print("Invalid Status Code")
exit(1)
return bs.BeautifulSoup(r.content, 'html.parser')
soup = get_soup("https://www.hockey-reference.com/boxscores/202008140WSH.html#all_advanced")
table = soup.find('table' , {'id' : "NYI_skaters"}).find('tbody').find_all('tr')
table = soup.find('table' , {'id' : "NYI_goalies"}).find('tbody').find_all('tr')
table = soup.find('table' , {'id' : "NYI_adv"}).find('tbody').find_all('tr')
代码能够顺利找到滑冰者和守门员的表格,但是找不到“_adv”表格,导致出现NoneType错误,因为找不到该表格。我可以找到“_adv”所在节点。
table = soup.find('div' , {'id' : "all_advanced"})
在那个div标签(all_advanced)下面,有一些看起来很奇怪的代码,所以我不确定那是否与此有关。我在其他事情上没有遇到过这个特定网站的问题,从未需要使用selenium,并且他们允许人们爬取数据。如果有帮助,将不胜感激。
编辑:使用panda.read_html也无法找到它。我已经通过替换所有上面的"table ="来解决它:
for comment in soup.find_all(text=lambda text: isinstance(text, bs.Comment)):
if comment.find("<table ") > 0:
comment_soup = bs.BeautifulSoup(comment, 'html.parser')
table = comment_soup.find('table' , {'id' : "NYI_adv"})
for player in table.find_all('tr' , {'class' : "ALLSH hidden"}):
print(player.find('a')['href'])
谢谢