Python 美丽的一组找到了所有的而不是所有的

Python 美丽的一组找到了所有的而不是所有的,python,html,beautifulsoup,lxml,Python,Html,Beautifulsoup,Lxml,下面的页面是我试图从中收集信息的示例页面。这有点难说,但实际上有8个表,因为它使用与其他表相同的类名调用得分汇总和惩罚汇总 我正在尝试使用下面的代码访问这些表,这些代码经过了一些修改,试图解决这个问题 import os from bs4 import BeautifulSoup # imports BeautifulSoup file = open("Detroit_vs_Tampa.txt") data = file.read() file.close() soup = Beautifu

下面的页面是我试图从中收集信息的示例页面。这有点难说,但实际上有8个表,因为它使用与其他表相同的类名调用得分汇总和惩罚汇总

我正在尝试使用下面的代码访问这些表,这些代码经过了一些修改,试图解决这个问题

import os
from bs4 import BeautifulSoup # imports BeautifulSoup

file = open("Detroit_vs_Tampa.txt")
data = file.read()
file.close()

soup = BeautifulSoup(data,'lxml')
get_table = soup.find_all(class_="overthrow table_container")

print(len(get_table))
这段代码的输出是6,这显然是不对的。我进一步了解到,它遗漏的表是advanced stats报告标题下的两个表

我还想指出,因为我认为这可能是解析器的问题,所以我尝试直接从网站使用html.parser和html.parser/lxml(与我在示例代码中使用的文本文件相反),所以我不认为这是一个损坏的html

我让一位朋友快速查看了一下,他认为这可能是我自己的一个小疏忽,他能够注意到该网站正在使用一个旧的IE黑客,并在表格前添加了一个评论标签
我不是100%确定这就是为什么它不起作用的原因,但我在谷歌上搜索了这个问题,却什么也没发现。我希望这里有人能给我指出正确的方向

最后一个表是由js加载的,但正如您所注意到的,它们也被放在静态html中的comment标记中。如果搜索
Comment
对象,可以使用
bs4
获取它们

import requests
from bs4 import BeautifulSoup, Comment

url = 'https://www.hockey-reference.com/boxscores/201610130TBL.html'
data = requests.get(url).text
soup = BeautifulSoup(data,'lxml')
get_table = soup.find_all(class_="overthrow table_container")
comment = soup.find(text=lambda text:isinstance(text, Comment) and 'table_container' in text)
get_table += BeautifulSoup(comment.string,'lxml').find_all(class_="overthrow table_container")
print(len(get_table))
或者,您可以使用,但它比
urllib
请求
重得多

from selenium import webdriver
from bs4 import BeautifulSoup 

url = 'https://www.hockey-reference.com/boxscores/201610130TBL.html'
driver = webdriver.Firefox()
driver.get(url)
data = driver.page_source
driver.quit()

soup = BeautifulSoup(data,'lxml')
get_table = soup.find_all(class_="overthrow table_container")
print(len(get_table))

您是否尝试将解析器从
lxml
更改为
html5lib
?我没有。我可以试一下。编辑,我只是用html5lib试了一下,得到了同样的结果。是的,硒是最后的选择。具体来说,因为我想从文本文档中执行所有这些操作,以减少网站上的负载。我没有注意到这个评论。对于这个特定的问题,这是一个很好的解决方案,我必须仔细阅读,以备将来使用。