通过我的功能,我可以从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 :(得分:1)
您正在为每个URI创建一个名为data的新列表。如果您将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
可以用字符串理解进行组合。
答案 1 :(得分: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
太平洋