列出从Twitter XML页面提取数据的问题

时间:2011-07-19 06:07:51

标签: python twitter beautifulsoup

通过我的功能,我可以从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

2 个答案:

答案 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

太平洋