2013-03-21 138 views
2

我想使用Python中的BeautifulSoup模塊讀取網頁上的列表。 HTML代碼如下:使用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 

可有人請告訴我如何讀取下一L1標籤。由於顯然在同一級別還有另一個li標籤,應該在next_siblings列表中。

沒有辦法訪問同一級別的所有li標籤。 findAll給出全部嵌套在給定結構中的標籤。

回答

0

請參閱this solution。它使用findAll()作爲嵌套元素。

不知道這完全是你想要的,但它可能是一個開始。

+0

是沒有辦法找到同一級別的標籤。 – UnadulteratedImagination 2013-03-21 09:52:11

0

你做這樣的事情 - 從@elssar的回答

main_list= soup.find('ul', attrs= {'id': 'sidebarmenu1'} 
elements= main_list.findAll('li') 
for link in elements: 
    #do something 
1

借款,我用這個代碼:

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) 

其中導航(項目)是遞歸函數:

def navigate(item): 
    for con in item.findAll('li',attrs={},recursive=False): 
      ul = con.find('ul') 
      if (ul == None): 
       #do something 
      else: 
       navigate(ul)