2011-07-19 36 views
1

使用我的功能,我可以從Twitter xml搜索頁面中提取用戶名,作爲我正在構建爲項目的朋友查找器應用程序。但問題是,當我抓住用戶名並將它們輸入到列表中時,發生了一些奇怪的事情。而不是每個用戶名作爲列表中的一個單獨的元素,我有每個用戶名是它自己的列表。從Twitter的XML頁面提取數據的列表問題

所以我得到20左右的名單。這裏是我的代碼產生的一個例子 list = [「twitter.com/username」],[「twitter.com/username1"],["twitter.com/username2」]

所以你看到每一個用戶名是它自己的列表。我有三個列表,每列有一個值,而不是有三個值的列表。這是一個絕對的噩夢迭代。我怎樣才能做到這一點,所以我有三個元素的列表?

代碼是在這裏:

def get_names(search_term = raw_input("What term do you want to search for?")): 
    search_page = "http://search.twitter.com/search.atom?q=" 
    search_page += search_term 
    data = [] 
    doc = urllib.urlopen(search_page).read() 
    soup = BeautifulStoneSoup(''.join(doc)) 
    data = soup.findAll("uri") 
    for uri in soup.findAll('uri'): 
     data = [] 
     uri = str(uri.extract()) 
     data.append(uri[5:-6] 
     print data 
+0

你應該嘗試使用LXML作爲它比BeautifulSoup快得多。 – cerberos

回答

1

你正在做一個新的列表,稱爲數據,爲每個URI。如果您將data = []行從for uri in soup.findAll('uri'):循環中移出,則最終應該有一個列表,而不是列表的列表。

另外,還有一些其他問題。 您的倒數第二行存在語法錯誤:您在該行末尾缺少右括號。 你有重複的行。嘗試刪除第一行data = []行,以及data = soup.findAll('url')行,因爲您只是再次爲for循環執行findAll。 另外,你不應該把raw_input放在函數簽名中,因爲這意味着它在你定義函數時得到調用,而不是在你調用函數的時候。

試試這個:

def get_names(): 
    search_page = "http://search.twitter.com/search.atom?q=" 
    search_page += raw_input("What term do you want to search for?") 
    doc = urllib.urlopen(search_page).read() 
    soup = BeautifulStoneSoup(doc) 
    doc.close() 
    data = [str(uri.extract())[5:-6] for uri in soup.findall('uri')] 
    return data 
names = get_names() 
print(names) 

編輯:您也不必''.join(doc)read()返回一個字符串,而不是一個序列; data可以與字符串理解裝配。

0

問題是你在你的數據分配的地方到處都是; 我建議改變這種代碼:

def get_names(search_term = raw_input("What term do you want to search for?")): 
    search_page = "http://search.twitter.com/search.atom?q=" 
    search_page += search_term 
    data = [] 
    doc = urllib.urlopen(search_page).read() 
    soup = BeautifulStoneSoup(''.join(doc)) 
    for uri in soup.findAll('uri'): 
     uri = str(uri.extract()) 
     data.append(uri[5:-6]) 
    print data 
    return data 

(未經檢驗的,因爲我不知道什麼是BeautifulStoneSoup指的)

HTH

太平洋

+0

由於'raw_input'僅在函數定義時運行,所以如果函數被多次調用,則不會按預期工作。 – agf

+0

哦,是的應該回想起來,謝謝:) –