【问题标题】:Parsing a list of <li> elements organized in two columns within a row(cell) with BeautifulSoup & Python使用 BeautifulSoup 和 Python 解析一行(单元格)内两列中组织的 <li> 元素列表
【发布时间】:2020-03-30 14:22:30
【问题描述】:
<div id="b_detalii_caracteristici" class="margin-boxes"> <h2 class="titlu-box special-caracteristici">Caracteristici</h2> <div class="row"> <div class="col-lg-6 col-md-6 col-sm-6"> <ul class="lista-tabelara"> <li>Nr. camere:<span>2</span></li> <li>Suprafaţă utilă:<span>44 mp</span></li> <li>Suprafaţă construită:<span>44 mp</span></li> <li>Compartimentare:<span>decomandat</span></li> <li>Confort:<span>lux</span></li> <li>Etaj:<span>Etaj 1 / 8</span></li> <li>Nr. bucătării:<span>1</span></li> <li>Nr. băi:<span>1</span></li> </ul> </div> <div class="col-lg-6 col-md-6 col-sm-6"> <ul class="lista-tabelara mobile-list"> <li>An construcţie:<span>2019</span></li> <li>Structură rezistenţă:<span>beton</span></li> <li>Tip imobil:<span>bloc de apartamente</span></li> <li>Regim înălţime:<span>P+8E</span></li> <li>Nr. balcoane:<span>1</span></li> </ul> </div> </div></div>

得到上述结构: 我需要找到一种方法来解析它并将每个 li 值存储在单独的变量中: 即

if string = "Nr. camere:":
  var1 = 2
elsif string = "Suprafata utila:":
  var2 = 44mp

等等……

我试过了:

property_detail.find_all('div', id="b_detalii_caracteristici")[0].find_all('ul', class_='lista-tabelara')[0].find_all("li")[0]

而且,这会给我下一个我需要在 for 循环中解析的结果:

但是,我被困在这里了。 感谢您的支持。

【问题讨论】:

  • 请使用实际代码进行编辑,而不是图像。
  • 好点了吗?

标签: python loops web-scraping beautifulsoup


【解决方案1】:

有一个非常有用的方法来调用内容,它返回一个包含标签子节点的列表:

from bs4 import BeautifulSoup 
html = '''<div id='b_detalii_caracteristici'>
    <ul class="lista-tabelara">
        <li>
            "Nr. camere:"
            <span>2</span>
        </li>
        <li>
            "Suprafata utila:"
            <span>44mp</span>
        </li>
    </ul>
</div>'''
soup = BeautifulSoup(html, 'html.parser')        
lis = soup.select('#b_detalii_caracteristici ul.lista-tabelara li')
for li in lis:
        li_content = li.contents
        li_text = li_content[0].strip()
        span_text = li_content[1].text
        print('li_content ==> ',li_content)
        print('li_text ==> ',li_text)
        print('span_text ==>',span_text)

输出:

li_content ==>  ['\n            "Nr. camere:"\n            ', <span>2</span>, '\n']
li_text ==>  "Nr. camere:"
span_text ==> 2
li_content ==>  ['\n            "Suprafata utila:"\n            ', <span>44mp</span>, '\n']
li_text ==>  "Suprafata utila:"
span_text ==> 44mp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多