2

我想使用 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 给出了嵌套在给定结构中的所有标签。

4

3 回答 3

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)
于 2013-03-21T12:09:17.573 回答
0

请参阅此解决方案。它对嵌套元素使用 findAll()。

不确定这是否完全是您想要的,但这可能是一个开始。

于 2013-03-21T03:06:06.107 回答
0

你做这样的事情 -

main_list= soup.find('ul', attrs= {'id': 'sidebarmenu1'}
elements= main_list.findAll('li')
for link in elements:
    #do something
于 2013-03-21T03:12:39.540 回答