在HTML注释中访问标签

时间:2018-12-11 00:14:58

标签: python html web-scraping beautifulsoup

我一直很熟悉通过BS4使用Python进行网络抓取。我无法找到针对嵌入注释中的DOM标签的解决方案。例如,当尝试从.html页面(https://www.basketball-reference.com/teams/GSW/2018/lineups/)获取数据时,检查页面上的表会显示:

<div class='table_outer_container"> ... </div>

通常我可以使用BeautifulSoup进行抓取。但是,当我查看实际的页面源代码时,该表包含在注释标记中:

<!--

<div class='table_outer_container"> ... </div>

-->

我一直无法找到一种通过BS4访问它的方法。有办法解决吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在将html输入bs4之前删除注释标签。

确保替换功能使用正确的字符串

import requests
page = requests.get("https://www.basketball-reference.com/teams/GSW/2018/lineups/")
print(page.text.count("""<!--\n   <div class="table_outer_container">"""),page.text.count("""</div>\n-->"""))
# out: 8 8

替换字符串

no_open_tag = page.text.replace("""<!--\n   <div class="table_outer_container">""","""<div class="table_outer_container">""")
no_close_tag = no_open_tag.replace("""</div>\n-->""","</div>")
print(no_close_tag.count("""<!--\n   <div class="table_outer_container">"""),no_close_tag.count("""</div>\n-->"""))
# out: 0 0

馈入bs4

from bs4 import BeautifulSoup
soup = BeautifulSoup(no_close_tag, "html5lib")
print(len(soup.findAll("div", {"class":"table_outer_container"})))
# out: 8

我们现在可以解析所有8个已注释的div。

相关问题