我试图找到一个嵌套在all_totals id内的链结元素(肯定存在,我检查了)。
import requests
from bs4 import BeautifulSoup, Comment
url = 'https://www.basketball-reference.com/players/a/abdelal01.html'
data = requests.get(url)
html = BeautifulSoup(data.text, 'html.parser')
print(html.select('#all_totals tbody').prettify())
但是,这个漂亮的汤代码仅返回一个空数组。我认为该问题可能是由位于GIANT html注释下的所需元素引起的。我添加了一些代码来尝试解析html以摆脱注释:
for comment in html.findAll(text=lambda text: isinstance(text, Comment)):
comment.extract()
print(html.select('#all_totals')[0].prettify())
这有助于消除评论;但是,嵌套在“ all_totals” ID中的大多数(但不是全部)HTML在执行此操作后便消失了。
我做错了什么,如何正确选择所需的html?
答案 0 :(得分:1)
您可以使用selenium
直接找到tbody
,因为它是由javascript加载的。
尝试一下:
from bs4 import BeautifulSoup, Comment
from selenium import webdriver
url = 'https://www.basketball-reference.com/players/a/abdelal01.html'
driver = webdriver.Firefox()
driver.get(url)
html = BeautifulSoup(driver.page_source)
print(html.find('div', {'id':'all_totals'}).find('tbody').prettify())
for comment in html.findAll(text=lambda text: isinstance(text, Comment)):
comment.extract()
print(html.find('div', {'id': 'all_totals'}).prettify())
答案 1 :(得分:1)
您不想使用var item = testimonial.GetContent() as TestimonialBlock;
if (item != null) {
<p>@item.Quote</p>
}
,因为您将删除包含感兴趣的html的注释。请参阅以下示例,以代替从注释中提取内容
extract