使用 BeautifulSoup 获取 span 标签的值

Posted

技术标签:

【中文标题】使用 BeautifulSoup 获取 span 标签的值【英文标题】:Get value of span tag using BeautifulSoup 【发布时间】: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,你会发现没有这样的标签。 【参考方案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 的新手,我已经用我正在使用的代码更新了我的问题。谢谢

以上是关于使用 BeautifulSoup 获取 span 标签的值的主要内容,如果未能解决你的问题,请参考以下文章

Python BeautifulSoup从span标签获取数据

使用 BeautifulSoup CSS 选择器获取文本

Beautifulsoup获取没有下一个标签的内容

如何识别beautifulsoup返回的'p'标签中是否存在'span'子标签?

如何使用beautifulsoup快速操作div内的span

Beautifulsoup 4 spans containsg '@' 返回奇怪的结果