首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用python抓取获取<li>内部</br>标记内的数据

如何使用python抓取获取<li>内部</br>标记内的数据
EN

Stack Overflow用户
提问于 2017-09-04 04:34:29
回答 1查看 826关注 0票数 0
代码语言:javascript
运行
复制
<div class="row features_2 "><br />
        <ul>

                    <li><b>Área privada:</b><br />
                    70,00 m²
                    </li>

            <!--area-->

                    <li><b>Área Const.:</b><br />
                    70,00 m²
                    </li>

            <!--precio metro cuadrado-->

                <li><b>Precio m²:</b><br />
                3.142.857/m²
                </li>

            <!--Valor noche si es alquiler vacacional-->

            <!--precio de administracion -->

                    <li><b>Admón:</b><br />
                    $150,000</li>

            <!--Estrato si aplica-->

                <li><b>Estrato:</b> <br />
                3

            <!--Estado si aplica-->

                <li><b>Estado:</b> <br />
                    Excelente
                </li>

            <!--edad si aplica-->

                <li><b>Antigüedad:</b> <br />
                1 a 8 años</li>

            <!--piso #-->

            <!--Clima-->

            <!--tipo de apartamento si aplica-->

            <!--para parqueaderos-->
            <!--caracteristicas parqueadero-->

            <!--Sector (siempre va)-->
            <li><b>Sector:</b> <br />

                <a href="#pnlMap" style="font-weight: bold;">Ver Mapa</a>

            </li>  


        </ul>

从上面我想得到标签中的值,但是我在将值保存到单独的列表时遇到了麻烦。

我想根据自身内部的数据来保存这些值。

例如,如果标签包含‘αrea privada:',那么我必须将值'70,00 m²’保存到list name area中

否则,如果标签包含'Precio m²:‘,那么我必须将值3.142.857/m²保存到名为Precio的列表中

我尝试了下面的代码来获取元素,但不确定如何根据上面的条件编写条件将数据保存到列表中。

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup
page = requests.get('https://www.fincaraiz.com.co/oceana-52/barranquilla/proyecto-nuevo-det-1041165.aspx')
soup = BeautifulSoup(page.content, 'lxml')
box_3 = soup.find('div' ,'row features_2 ')
box_3_1  = box_3.findAll('li')
for i in box_3_1:
    print (i)

否则,是否有其他选项可以将上述标记中的数据保存到相应的列表中。

EN

回答 1

Stack Overflow用户

发布于 2017-09-04 05:22:46

使用<br>next_sibling属性

代码语言:javascript
运行
复制
for li in box_3_1:
    print(str(li.br.next_sibling).strip())

输出:

代码语言:javascript
运行
复制
71,00 a 185,00 m²
78,00 a 207,00 m²
5
Cálido

OP想要在不同的列表中存储“αrea”和"Precio“数据。假设这两个字符串永远不会出现在同一个<li>标题中,这里有一个完整的解决方案:

代码语言:javascript
运行
复制
area = []
precio = []
for li in box_3_1:
    heading_words = li.b.text.split()
    target_content = str(li.br.next_sibling).strip()
    if "Área" in heading_words:
        area.append(target_content)
    elif "Precio" in heading_words:
        precio.append(target_content)

对于更一般的解决方案,可以考虑创建一个关键标题术语列表,然后将所有输出存储在一个字典中。例如:

代码语言:javascript
运行
复制
import re

key_terms = ["Área", "Precio", "Estrato"]
data = {k:[] for k in key_terms}

for li in box_3_1:
    heading = li.b.text
    target_content = str(li.br.next_sibling).strip()
    for term in key_terms:
        # Headers like "Estrato:" do not match on split() due to end ":"; use re instead.
        if re.search(term, heading):
            data[term].append(target_content)          
data
{'Estrato': ['5'],
 'Precio': [],
 'Área': ['71,00 a 185,00 m²', '78,00 a 207,00 m²']}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46027604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档