【问题标题】:Get value of span tag using BeautifulSoup使用 BeautifulSoup 获取 span 标签的值
【发布时间】:2017-06-29 17:37:57
【问题描述】:

我有许多 Facebook 群组,我想了解其中的成员数量。这个组就是一个例子:https://www.facebook.com/groups/347805588637627/ 我查看了页面上的检查元素,它的存储方式如下:

<span id="count_text">9,413 members</span>

我正在尝试从页面中删除“9,413 个成员”。我尝试过使用 BeautifulSoup,但无法解决。

谢谢

编辑:

from bs4 import BeautifulSoup
import requests

url = "https://www.facebook.com/groups/347805588637627/"
r  = requests.get(url)
data = r.text
soup = BeautifulSoup(data, "html.parser")
span = soup.find("span", id="count_text")
print(span.text)

【问题讨论】:

  • 打印data,你会发现没有这样的标签。

标签: python html python-3.x parsing beautifulsoup


【解决方案1】:

如果你有多个 span 标签,你可以试试这个

from bs4 import BeautifulSoup

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

tags = soup('span')

for tag in tags:
  print(tag.contents[0])

【讨论】:

    【解决方案2】:

    Facebook 使用javascrypt 来防止机器人抓取。你需要使用selenium在python上提取数据。

    【讨论】:

      【解决方案3】:

      如果页面中有多个span标签:

      from bs4 import BeautifulSoup
      soup = BeautifulSoup(your_html_input, 'html.parser')
      span = soup.find("span", id="count_text")
      span.text
      

      【讨论】:

      • 谢谢,我尝试使用它,但得到一个 AttributeError: 'NoneType' object has no attribute 'text' 我已经用我正在使用的代码更新了我的问题。
      • soup.find() 未找到任何结果,因此您在None 上调用.text。尝试在浏览器中以隐身模式查看同一网页;未登录时不显示您要查找的元素。
      • 谢谢,这完全有道理,看来我将不得不找到另一种方法来通过 url 获取 facebook 组的成员数。是否可以登录然后以某种方式使用美丽的汤?
      • 是的,你不是第一个面临这个问题的人。这是一个类似问题的示例,有多种解决方案:*.com/questions/21928368/…
      【解决方案4】:

      你可以使用解析span的text属性:

      >>> from bs4 import BeautifulSoup
      >>> soup = BeautifulSoup('<span id="count_text">9,413 members</span>',   'html.parser')
      >>> soup.span
      <span id="count_text">9,413 members</span> 
      >>> soup.span.text
      '9,413 members'
      

      【讨论】:

      • 这可以完美地工作,但是在实际页面上尝试它时,我似乎仍然无法让它工作。我是 BeautifulSoup 的新手,我已经用我正在使用的代码更新了我的问题。谢谢