【问题标题】:Accessing Tags within HTML comments访问 HTML 注释中的标签
【发布时间】:2019-05-11 22:35:31
【问题描述】:

我已经通过 BS4 熟悉了使用 Python 进行网络抓取。我一直无法找到嵌入在 cmets 中的 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 访问它的方法。有没有办法解决这个问题?

谢谢。

【问题讨论】:

  • 看起来stackoverflow.com/q/3507283/3491475 回答了这个问题。
  • 据我了解,这是指提取cmets,这肯定是问题的一部分。但是,当使用此方法时,它会将它们的内容作为字符串返回,无法使用 BS4 进一步解析。我想知道是否有办法提取 cmets 并进一步解析它们,就好像它们是 DOM,而不仅仅是文本
  • "它将它们的内容作为字符串返回,不能用 BS4 进行进一步解析" - 嗯...将 HTML 字符串解析为树是 BS4 所做的.

标签: python html web-scraping beautifulsoup


【解决方案1】:

您可以在将 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。

【讨论】:

  • 哇,最近才开始对请求进行更深入的研究……完美。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-10-10
  • 2015-12-19
  • 2016-11-05
  • 1970-01-01
  • 2013-09-30
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多