创建包含空和填充部分的混合列表列表?

问题描述 投票:0回答:1

使用BeautifulSoup,我试图创建一个列表列表,它使用下面的HTML代码示例返回空列表以及它们出现的序列中的变量。

[<div class="Stats">
</div> 
<div class="Stats">
</div>
<div class="Stats">
</div>
<div class="Stats">
</div>
<div class="Stats">
</div>
<div class="Stats">
<div class="Stats__x">
<!--
-->C<!--
--></div>
</div>
<div class="Stats">
</div>
<div class="Stats">
</div>
<div class="Stats">
</div>]

我目前的代码尝试正在......

[['C']]

我想得到的结果是......

[[], [], [], [], [], ['C'], [], [], []] 

我已经尝试了很多方法,通过查找div的数量x = len(stats = soup.find_all("div", {"class": "Stats"})来创建列表的空列表,然后使用for循环尝试附加元素(如果存在)并将空列表留在原位(如果不存在)。

hList = []
for each in stats:
    for each2 in each.find_all("div", {"class":"Stats__x"}):
        hList.append(each2.text.split())

我可能需要执行某种类型的索引赋值,但我无法弄明白。

谢谢。

html python-3.x web-scraping beautifulsoup
1个回答
1
投票

首先,我用div搜索所有class="Stats",并且在每个div里面,我用div搜索一个class="Stats__x"。如果我得到None然后我把它改成[]

data = '''<div class="Stats"></div>
<div class="Stats"></div>
<div class="Stats"></div>
<div class="Stats"></div>
<div class="Stats"></div>
<div class="Stats">
    <div class="Stats__x">
    <!--
    -->C<!--
    --></div>
</div>
<div class="Stats"></div>
<div class="Stats"></div>
<div class="Stats"></div>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

result = []

for div in soup.find_all("div", {"class": "Stats"}):
    item = div.find("div", {"class": "Stats__x"}):
    if item:
        result.append( item.text.split() )
        #result.append( [item.text.strip()] )
    else:
        result.append( [] )

print(result)    
© www.soinside.com 2019 - 2024. All rights reserved.