使用BeautifulSoup解析HTML
我想用Python的BeautifulSoup模块来读取网页上的一个列表。网页的HTML代码如下:
...
<ul id="sidebarmenu1">
<li><a href="Business">Business</a></li>
<li><a href="Warfare">Chinese</a></li>
</ul>
...
我用BeautifulSoup来解析这个文档。现在我想遍历这个列表里的元素。所以我使用了next_siblings这个属性,代码如下:
first_element = soup.ul.li
for items in soup.ul.li.next_siblings :
<statements>
但是,这样做出现了以下错误:
TypeError: 'NoneType' object is not iterable
有没有人能告诉我怎么读取下一个li标签?因为显然在同一层级上还有另一个li标签,它应该在next_siblings列表里。
难道没有办法访问同一层级的所有li标签吗?findAll方法会返回所有嵌套在特定结构中的标签。
3 个回答
0
你可以这样做 -
main_list= soup.find('ul', attrs= {'id': 'sidebarmenu1'}
elements= main_list.findAll('li')
for link in elements:
#do something
0
可以看看 这个解决方案。它使用了 findAll() 来处理嵌套的元素。
我不确定这是否完全符合你的需求,但这可能是个不错的起点。
1
借鉴了@elssar的回答,我用了这段代码:
main_list= soup.find('ul', attrs= {'id': 'sidebarmenu1'}
for li in main_list.findAll('li',attrs={},recursive=False):
ul = li.find('ul')
if ul == None :
#do something
else:
navigate(ul)
其中,navigate(item) 是一个递归函数:
def navigate(item):
for con in item.findAll('li',attrs={},recursive=False):
ul = con.find('ul')
if (ul == None):
#do something
else:
navigate(ul)