如何让 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 分解()

Beautifulsoup:当我尝试使用 Beautifulsoup4 访问 soup.head.next_sibling 值时获得新行

如何在 asp.net Web 窗体上实现 Ninject 或 DI?