如何让 BeautifulSoup 获得以下 div 类的价值
Posted
技术标签:
【中文标题】如何让 BeautifulSoup 获得以下 div 类的价值【英文标题】:How to BeautifulSoup getting value that following div class 【发布时间】:2021-11-18 07:57:35 【问题描述】:我正在尝试从以下 html 代码中提取“24.8”:
<div class="anlik-sicaklik">
<div class="anlik-sicaklik-deger ng-binding" ng-bind="sondurum[0].sicaklik | comma">
24,8
::after
</div>
<div class="anlik-sicaklik-havadurumu">
<div class="anlik-sicaklik-havadurumu-ikonu">
这是我的代码
import requests
from bs4 import BeautifulSoup
r = requests.get("https://mgm.gov.tr/tahmin/il-ve-ilceler.aspx?il=ANTALYA&ilce=KUMLUCA")
soup = BeautifulSoup(r.content, "lxml")
sicaklik = soup.find('div', 'class':'anlik-sicaklik-deger')
print(sicaklik)
我的代码输出
<div class="anlik-sicaklik-deger" ng-bind="sondurum[0].sicaklik | comma">
</div>
你能帮我获得24,8的价值吗?
【问题讨论】:
这不是一个真正的美丽汤问题。您想要的值是由 javascript 动态生成的,因此您无法通过requests
看到它,正如您通过检查 r.content
可能会注意到的那样。
【参考方案1】:
您的问题更多地关注解析字符串而不是网页。所以最好是,一旦找到带有 bs4 的标签,就用一些正则表达式解析字符串。
匹配条件([0-9]+,[0-9])
是一个或多个数字,由,
隔开,然后是一个数字。
注意最终结果nr
是一个字符串,要使其成为一个数字,您应该使用float(nr.replace(',', '.'))
。
from bs4 import BeautifulSoup
import re
html = """
<div class="anlik-sicaklik-deger ng-binding" ng-bind="sondurum[0].sicaklik | comma">
24,8
::after
</div>
"""
soup = BeautifulSoup(html, 'lxml')
div = soup.find('div', class_='anlik-sicaklik-deger', string=True)
# get text
text = str(div.string).strip()
# regex
nr = re.search(r'([0-9]+,[0-9])', text).group(0)
print(nr)
输出
24,8
【讨论】:
问题不是很好。根据需要,我抓取了给定的字符串快照,而不是网页【参考方案2】:from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
sicaklik = soup.find('div', 'class':'anlik-sicaklik-deger').**text**
【讨论】:
以上是关于如何让 BeautifulSoup 获得以下 div 类的价值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 BeautifulSoup 从父子标签中获取文本以放入 DOCX 表中
如何让 beautifulsoup 对脚本标签的内容进行编码和解码
如何让 Beautifulsoup 不添加 <html> 或 <?xml ?>
Beautifulsoup:当我尝试使用 Beautifulsoup4 访问 soup.head.next_sibling 值时获得新行