如何获取特定文本后的值?

2024-10-01 11:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获取字符串“Estrato:”和“Piso No:”后面的值

<ul class="boxcube">
<!--area-->
<li><b>Área Const.:</b><br/>
                        90,00 m²</li>
<!--Estrato si aplica-->
</li><li><b>Estrato:</b><br/>
                    5         
                </li>
<!--edad si aplica-->
<li><b>Antigüedad:</b><br/>
                        1 a 8 años</li>
<!--piso #-->
<li><b>Piso No:</b><br/>
                        6º</li>
</ul>

这是我的密码

      try:
        estrato=soup.find('ul',class_='boxcube').find(string=re.compile("Estrato:")).next_sibling
      except:
        estrato='NA'
      try:
        piso=soup.find('ul',class_='boxcube').find(string=re.compile("Piso No:")).next_sibling
      except:
        piso='NA'

在这两种情况下都没有返回结果

我想要的结果是

Piso: 6
Estrato: 5

谢谢


Tags: nobrlifindulclasstrysi
3条回答

您可以尝试以下方法:

from bs4 import BeautifulSoup
import requests

r = requests.get(yoururl)
soup = r.text #or r.content

for x in soup.find_all("li"):
    if 'Estrato' in x.text:
         print((x.text).replace("\n", ""))

    if 'Piso' in x.text:
         print((x.text).replace("\n", ""))
html_doc = """
<ul class="boxcube">
    <! area >
    <li><b>Área Const.:</b><br/>
                        90,00 m²</li>
    <! Estrato si aplica >
    </li>
    <li><b>Estrato:</b><br/>
                    5         
                </li>
    <! edad si aplica >
    <li><b>Antigüedad:</b><br/>
                        1 a 8 años</li>
    <! piso # >
    <li><b>Piso No:</b><br/>
                        6º</li>
</ul>"""

from bs4 import BeautifulSoup

def getSpecificValue(doc):
    soup = BeautifulSoup(doc)
    specificField = ['Estrato', 'Piso']
    values = {}
    for li in soup.findAll('li'):
        b_field = li.b.get_text()
        for field in specificField:
            if b_field.find(field) != -1:
                values[field] = list(li.children)[-1].strip()
    return values

您可以使用以下代码来查找所需元素旁边的文本:

from bs4 import BeautifulSoup

html_doc = """
<ul class="boxcube">
<! area >
<li><b>Área Const.:</b><br/>
                        90,00 m²</li>
<! Estrato si aplica >
</li><li><b>Estrato:</b><br/>
                    5         
                </li>
<! edad si aplica >
<li><b>Antigüedad:</b><br/>
                        1 a 8 años</li>
<! piso # >
<li><b>Piso No:</b><br/>
                        6º</li>
</ul>
"""

soup = BeautifulSoup(html_doc, "html.parser")

e = soup.select_one('b:-soup-contains("Estrato:")').find_next_sibling(text=True)
p = soup.select_one('b:-soup-contains("Piso No:")').find_next_sibling(text=True)

print("Piso:", p.strip())
print("Estrato:", e.strip())

印刷品:

Piso: 6º
Estrato: 5

相关问题 更多 >