这是我正在使用的html:
<a 'data' = 'ubr_app'>List</a>
<ul>
<li>
'a'
</li>
<li>
'b'
</li>
<li>
'c'
</li>
<ul>
<li>
1
</li>
<li>
2
</li>
<li>
3
</li>
我想将这些列表中的所有信息存储在单独的数组中。我在python中所做的是以下内容:
def getItems(soup):
item1_list = []
item2_list = []
appliance = soup.find('a', {'data-lid' : 'ubr_app'})
appliance_ul = appliance.parent.find_next_sibling() # go to 1st <ul> sibling
for item in appliance_ul.find_all('li'):
item1_list.append(item.text)
appliance_ul = appliance_ul.find_next_sibling() # go to 2nd <ul> sibling
for item in appliance_ul.find_all('li'):
item2_list.append(item.text)
return item1_list, item2_list
这给了我['a','b','c']和[1,2,3]。 这就是我想要做的,但它是非常静态的,看起来像丑陋的代码。有没有办法只搜索所有现有的'ul'兄弟姐妹,这样我就可以将信息保存在每个嵌套列表中?
答案 0 :(得分:0)
使用.find_next_siblings()
(plural)而不是使用.find_next_sibling()
,并为其提供过滤器:
def getItems(soup):
items = []
appliance = soup.select('a[data-lid="ubr_app"]')[0]
for appliance_ul in appliance.parent.find_next_siblings('ul'):
items.append([i.text for i in appliance_ul.find_all('li')])
return items
.find_next_siblings('ul')
调用会返回所有<ul>
兄弟代码的列表。