2014-02-17 41 views
0

我正在使用isinstance來選擇一些html標記並將它們傳遞給Beautifulsoup函數。問題是我不斷從哪些應該是完美的可執行代碼中獲取NameErrors。isinstance無法正常使用beautifulsoup(NameError)

def horse_search(tag): 
    return (tag.has_attr('href') and isinstance(tag.previous_element, span)) 

... 

for tag in soup.find_all(horse_search): 
    print (tag)  

NameError:全局名稱「跨度」沒有定義

而且我從Beautifulsoup的文檔中的示例代碼使用isinstance結合tag.previous_element收到錯誤

def surrounded_by_strings(tag): 
    return (isinstance(tag.next_element, NavigableString) 
      and isinstance(tag.previous_element, NavigableString)) 

for tag in soup.find_all(surrounded_by_strings): 
    print tag.name 

NameError:未定義全局名稱「NavigableString」

什麼可能是錯誤的?謝謝!

+1

你想用這些'isinstance'調用來實現什麼?還顯示你的進口 –

+1

進口是從BSS進口BeautifulSoup,導入請求,導入重新導入時間和導入隨機。我正在尋找隔離包含我需要的字符串的標籤。在所有標籤中,只有少數我需要,而且他們都是跨度標籤的兒童。 – user3146384

回答

0

發現的跨度家長和href屬性的所有錨做到:

for span in soup.find_all('span'): 
    for a in span.find_all('a'): 
     if a.has_attr('href'): 
      print a['href'] 

不過,雖然這是很好的,因爲在大多數情況下,使用一些工具,它支持XPath可以更好,爲例如,使用lxml和xpath你的代碼可以看起來像整齊:

from lxml import etree 
etree.parse(url, etree.HTMLParser()).xpath('//span/a/@href') 
+0

得到它的工作,非常感謝 – user3146384

+1

可悲的是,這並沒有回答這個問題(「什麼可能是錯的」 - 即爲什麼NameErrors被拋出)。 – dpb