BeautifulSoup中CSS selector无法定位id为four_factors的table标签问题
问题原因
你要定位的id="four_factors"表格被包裹在HTML注释(<!-- -->)中,BeautifulSoup解析时默认会把注释内容标记为特殊注释节点,不会将其内部的标签识别为可查询的普通DOM元素,因此你通过标签选择器无法匹配到目标元素。而Python原生的字符串查找是直接匹配原始HTML文本,不受DOM结构解析规则限制,所以能找到对应字符串的位置。
你之前不加表格前缀的选择器返回的98,是页面非注释区域其他表格的同属性td值,并非你要的four_factors表格内的数据。
解决方案
先移除HTML中的注释标记,将注释内的表格转为普通DOM节点后再执行查询即可,示例修改代码如下:
from urllib.request import urlopen from bs4 import BeautifulSoup import re url = "https://www.basketball-reference.com/boxscores/201510310MEM.html" response = urlopen(url) html = response.read().decode() # 移除所有HTML注释标记 html = re.sub(r'<!--|-->', '', html) soup = BeautifulSoup(html, 'html.parser') # 此时选择器可正常返回结果 print(soup.select('table[id="four_factors"] tbody > tr > td[data-stat="off_rtg"]'))
运行后即可得到对应两个off_rtg节点的查询结果。
内容的提问来源于stack exchange,提问作者joshblech
相关产品推荐
相关产品推荐

