2012-02-13 51 views
1

我已經寫了一個非常簡單的代碼來獲得urbandictionary.com上任何詞條的第一個結果。我從寫一個簡單的東西開始,看看他們的代碼是如何格式化的。檢索python中第一個詞條的城市詞典結果

def parseudtest(searchurl):  
    url = 'http://www.urbandictionary.com/define.php?term=%s' %searchurl 
    url_info = urllib.urlopen(url) 
    for lines in url_info: 
     print lines 

對於測試,我搜索'cats',並且使用了作爲可變searchurl。我收到的輸出當然是一個巨大的頁面,但這裏是我關心的部分約:

<meta content='He set us up the bomb. Also took all our base.' name='Description' /> 

<meta content='He set us up the bomb. Also took all our base.' property='og:description' /> 

<meta content='cats' property='og:title' /> 

<meta content="http://static3.urbandictionary.com/rel-1e0b481/images/og_image.png" property="og:image" /> 

<meta content='Urban Dictionary' property='og:site_name' /> 

正如你所看到的,在第一時間元素「中繼內容」出現在網站上,這是搜索詞的第一個定義。因此,我編寫了以下代碼以檢索它:

def parseud(searchurl):  
    url = 'http://www.urbandictionary.com/define.php?term=%s' %searchurl 
    url_info = urllib.urlopen(url) 
    if (url_info): 
     xmldoc = minidom.parse(url_info) 
    if (xmldoc): 
     definition = xmldoc.getElementsByTagName('meta content')[0].firstChild.data 
     print definition 

由於某些原因,解析似乎無法正常工作,並且每次都會遇到錯誤。這是特別令人困惑,因爲該網站似乎使用基本上相同的格式,我成功地從其他網站檢索到特定的數據。如果有人能幫我弄清楚我在這裏搞砸了什麼,那將不勝感激。

回答

1

由於您不會爲發生的錯誤提供回溯,所以很難具體說明,但我認爲儘管網站聲稱是XHTML,但它並不是真正有效的XML。您最好使用Beautiful Soup,因爲它是專爲解析HTML而設計的,並且會正確處理破損的標記。

1

我從來沒有使用過minidom命名解析器,但我認爲這個問題是您致電:

xmldoc.getElementsByTagName('meta content') 

而塔標記名稱是metacontent只是第一屬性(如圖所示很好由高亮你的html代碼)

嘗試更換該位有:

xmldoc.getElementsByTagName('meta') 
+0

你的答案是絕對正確的,但即使我用它不會工作正確的標籤名。問題在於該頁面無效的XML,所以我下載並實施了美麗的湯,做我現在想要的。 – Jordan 2012-02-13 11:45:54

+0

@Jordan:使用BeautifulSoup是一個不錯的選擇:) – 2012-02-13 11:53:58