Return 中的元素 div 直到类名更改为 bs4
Return element in div until classname changes bs4
我正在尝试使用 Beautiful Soup 来打印 div 的元素。这有点难以解释,所以我简化了它。如果您需要更多说明,请告诉我 :) div 的结构如下:
<div>
<div class="heading"></div>
<div class="info"></div>
<div class="heading"></div>
<div class="info"></div>
<div class="info"></div>
<div class="heading"></div>
<div class="info"></div>
</div>
我正在尝试 return 一个包含列表的列表。每个分块列表都应包含标题,以及信息 divs 直到下一个标题。例如,它看起来像这样:[['heading', 'info'], ['heading', 'info', 'info']...]
因此,我尝试这样做:
findAllDivs = container.find_all('div')
myList = []
for i in findAllDivs:
if i['class'][0] == 'heading':
try:
if innerList:
myList.append(innerList)
except:
pass
innerList = []
innerList.append(i)
elif i['class'][0] == 'info':
innerList.append(i)
这有效,但它不适用于 return 最后一个 heading, info
列表。
Select 所有 headers,遍历它们和它们的 find_next_siblings()
,如果信息不在其 class 列表中则中断:
for h in soup.div.select('.heading'):
d = [h.text]
for i in h.find_next_siblings():
if 'info' not in i.get('class'):
break
d.append(i.text)
data.append(d)
例子
from bs4 import BeautifulSoup
html = '''
<div>
<div class="heading">head1</div>
<div class="info">info1</div>
<div class="heading">head2</div>
<div class="info">info2.1</div>
<div class="info">info2.2</div>
<div class="heading">head3</div>
<div class="info">info3</div>
</div>
'''
soup = BeautifulSoup(html)
data = []
for h in soup.div.select('.heading'):
d = [h.text]
for i in h.find_next_siblings():
if 'info' not in i.get('class'):
break
d.append(i.text)
data.append(d)
data
输出
[['head1', 'info1'], ['head2', 'info2.1', 'info2.2'], ['head3', 'info3']]
我正在尝试使用 Beautiful Soup 来打印 div 的元素。这有点难以解释,所以我简化了它。如果您需要更多说明,请告诉我 :) div 的结构如下:
<div>
<div class="heading"></div>
<div class="info"></div>
<div class="heading"></div>
<div class="info"></div>
<div class="info"></div>
<div class="heading"></div>
<div class="info"></div>
</div>
我正在尝试 return 一个包含列表的列表。每个分块列表都应包含标题,以及信息 divs 直到下一个标题。例如,它看起来像这样:[['heading', 'info'], ['heading', 'info', 'info']...]
因此,我尝试这样做:
findAllDivs = container.find_all('div')
myList = []
for i in findAllDivs:
if i['class'][0] == 'heading':
try:
if innerList:
myList.append(innerList)
except:
pass
innerList = []
innerList.append(i)
elif i['class'][0] == 'info':
innerList.append(i)
这有效,但它不适用于 return 最后一个 heading, info
列表。
Select 所有 headers,遍历它们和它们的 find_next_siblings()
,如果信息不在其 class 列表中则中断:
for h in soup.div.select('.heading'):
d = [h.text]
for i in h.find_next_siblings():
if 'info' not in i.get('class'):
break
d.append(i.text)
data.append(d)
例子
from bs4 import BeautifulSoup
html = '''
<div>
<div class="heading">head1</div>
<div class="info">info1</div>
<div class="heading">head2</div>
<div class="info">info2.1</div>
<div class="info">info2.2</div>
<div class="heading">head3</div>
<div class="info">info3</div>
</div>
'''
soup = BeautifulSoup(html)
data = []
for h in soup.div.select('.heading'):
d = [h.text]
for i in h.find_next_siblings():
if 'info' not in i.get('class'):
break
d.append(i.text)
data.append(d)
data
输出
[['head1', 'info1'], ['head2', 'info2.1', 'info2.2'], ['head3', 'info3']]