使用 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返回的'p'标签中是否存在'span'子标签?