【问题标题】:Scraping <span> tag with BeautifulSoup用 BeautifulSoup 抓取 <span> 标签
【发布时间】:2021-06-05 21:36:50
【问题描述】:

我正在尝试使用 BeautifulSoup 抓取一个页面,并且&lt;span&gt; 标签内有&lt;script&gt; 标签,如下所示

<span data-link="{include tmpl='productCardOrderCount' ^~ordersCount=selectedNomenclature^ordersCount}"><script type="jsv#28_"></script>
<script type="jsv#27^"></script>
<script type="jsv#29_"></script>
<script type="jsv#26^"></script>
более 20 раз
<script type="jsv/26^"></script>
<script type="jsv/29_"></script>
<script type="jsv/27^"></script>
<script type="jsv/28_"></script>
</span>

但是由于&lt;script&gt;标签在bs4中没有被解析为HTML,所以下面的代码返回&lt;span&gt;标签而不带文本("более 20 раз"

rating = soup.find("p", {"class": "order-quantity"})

如何获取&lt;span&gt; 标签内的文字?

【问题讨论】:

  • 页面是动态加载的吗?使用print(soup.prettify())时是否出现文字?
  • BS4 将解析脚本标签,它只是不执行它们。但是如果文本在 HTML 中,它应该被返回。
  • @MendelG 不,它不包含任何
  • @SofiyaChobanyan 页面是动态加载的。见Web-scraping JavaScript page with Python
  • 谢谢,会查收的

标签: python html beautifulsoup


【解决方案1】:

文本位于标签&lt;script type="jsv#26^"&gt; 下。您可以使用soup.find("script", type="jsv#26^") 搜索它。

from bs4 import BeautifulSoup


html = """
<span data-link="{include tmpl='productCardOrderCount' ^~ordersCount=selectedNomenclature^ordersCount}"><script type="jsv#28_"></script>
<script type="jsv#27^"></script>
<script type="jsv#29_"></script>
<script type="jsv#26^"></script>
более 20 раз
<script type="jsv/26^"></script>
<script type="jsv/29_"></script>
<script type="jsv/27^"></script>
<script type="jsv/28_"></script>
</span>
"""

soup = BeautifulSoup(html, "html.parser")

print(soup.find("script", type="jsv#26^").find_next(text=True).strip())

输出:

более 20 раз

【讨论】:

  • 代码抛出如下错误:AttributeError: 'NoneType' object has no attribute 'find_next'
猜你喜欢
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
相关资源
最近更新 更多