1

我正在尝试使用 Python 解析 Twitter RSS 提要并将信息放入 sqlite 数据库中。这是一个例子:

MiamiPete: today's "Last Call" is now up http://bit.ly/MGDzu #stocks #stockmarket #finance #money

我想要做的是为主要内容(Miami Pete…now up)创建一列,为 URL(http://bit.ly/MGDzu)创建一列,为主题标签(股票、股市、金融、货币)创建四个单独的列。我一直在玩弄如何做到这一点。

任何建议将不胜感激!

PS我一直在玩的一些代码如下 - 你可以看到我最初尝试创建一个名为“tiny_url”的变量并将其拆分,它似乎确实这样做了,但这种微弱的尝试并没有接近解决问题如上所述。:)

def store_feed_items(id, items):
    """ Takes a feed_id and a list of items and stored them in the DB """
    for entry in items:
        c.execute('SELECT entry_id from RSSEntries WHERE url=?', (entry.link,))
        tinyurl = entry.summary    ### I added this in
        print tinyurl.split('http') ### I added this in 
        if len(c.fetchall()) == 0:
            c.execute('INSERT INTO RSSEntries (id, url, title, content, tinyurl, date, tiny) VALUES (?,?,?,?,?,?,?)', (id, entry.link, entry.title, entry.summary, tinyurl, strftime("%Y-%m-%d %H:%M:%S",entry.updated_parsed), tiny ))
4

4 回答 4

4

看起来您的数据驱动设计存在相当大的缺陷。除非您的所有条目都有一个文本部分、一个 url 和最多 4 个标签,否则它不会起作用。

您还需要将保存到 db 与解析分开。使用正则表达式(甚至字符串方法)可以轻松完成解析:

>>> s = your_string
>>> s.split()
['MiamiPete:', "today's", '"Last', 'Call"', 'is', 'now', 'up', 'http://bit.ly/MGDzu', '#stocks', '#stockmarket', '#finance', '#money']
>>> url = [i for i in s.split() if i.startswith('http://')]
>>> url
['http://bit.ly/MGDzu']
>>> tags = [i for i in s.split() if i.startswith('#')]
>>> tags
['#stocks', '#stockmarket', '#finance', '#money']
>>> ' '.join(i for i in s.split() if i not in url+tags)
'MiamiPete: today\'s "Last Call" is now up'

不过,单表数据库设计可能不得不放弃。

于 2009-08-30T18:21:40.250 回答
2

此外,您可以使用正则表达式解析字符串:

>>> s = (u'MiamiPete: today\'s "Last Call" is now up http://bit.ly/MGDzu '
         '#stocks #stockmarket #finance #money')
>>> re.match(r'(.*) (http://[^ ]+)', s).groups()
(u'MiamiPete: today\'s "Last Call" is now up', u'http://bit.ly/MGDzu')
>>> re.findall(r'(#\w+)', s)
[u'#stocks', u'#stockmarket', u'#finance', u'#money']
于 2009-08-30T18:41:51.147 回答
1

Twitter 有一个 api,您可以在这里更轻松地使用它,http://apiwiki.twitter.com/Twitter-API-Documentation

您可以获取 JSON 或 XML 格式的结果,并使用众多 Python 库之一来解析结果。

或者,如果您必须使用 RSS,则可以使用 Python 提要解析器,例如http://www.feedparser.org/

于 2009-08-30T18:20:54.107 回答
1

我强烈推荐使用 Twitter API。实际上有两个 API,一个用于主推特服务器,一个用于搜索服务器。它们用于不同的事情。

您可以在 svn 上找到示例代码 pytwitter。添加 simplejson,您可以在几分钟内完成非常强大的事情。

祝你好运

于 2009-08-30T22:59:11.720 回答