使用Python分割Twitter RSS字符串

1 投票
4 回答
829 浏览
提问于 2025-04-15 13:58

我正在尝试解析Twitter的RSS源,并把信息放到一个sqlite数据库里,使用的是Python。下面是一个例子:

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

我想做的是创建一列来存放主要内容(比如Miami Pete…now up),一列来存放网址(比如http://bit.ly/MGDzu),还有四列分别存放标签(比如股票、股市、金融、钱)。我一直在尝试如何实现这个目标。

如果能给点建议,我会非常感激!

附注:下面是我尝试过的一些代码——你可以看到我最开始创建了一个叫“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 个回答

1

Twitter有一个接口,可能会对你更容易使用,具体可以查看这个链接:http://apiwiki.twitter.com/Twitter-API-Documentation

你可以把结果获取为JSON或XML格式,然后使用一些Python库来解析这些结果。

如果你一定要使用RSS的话,可以用一些Python的解析工具,比如这个网站:http://www.feedparser.org/

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']
4

看起来你的数据驱动设计有点问题。除非你所有的条目都有文本部分、一个网址和最多四个标签,否则这个设计是行不通的。

你还需要把保存数据到数据库的过程和解析数据的过程分开。解析数据可以很简单地用正则表达式(或者甚至是字符串处理方法)来完成:

>>> 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'

不过,单表数据库的设计可能得改一下。

撰写回答