使用Python爬取推文(日期范围)

1 投票
2 回答
1256 浏览
提问于 2025-04-18 02:18

我正在为我的论文抓取推文。我使用的是Pattern(http://www.clips.ua.ac.be/pages/pattern-web),这个工具可以用来抓取数据(还有情感分析),需要用Python(2.7)来运行。

到目前为止,我已经写出了一个程序,下面有代码。这个程序可以工作,但只能收集最近的X条推文。

我想问的是:你能帮我改进一下,让我可以抓取某个特定用户名在特定日期范围内的推文吗?比如说:2014年1月1日到2014年3月31日。

(或者如果不行的话,能不能增加一下目前抓取的推文数量?因为我用同样的程序去抓取不同用户名的推文(每个用户名都有成千上万条推文),结果通常在40到400条之间。)

非常感谢你的帮助!

(PS:如果以上都不行,我也很乐意听听其他收集必要推文的替代方案。我得补充一下,我的编程基础不是很强。)

import os, sys; sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))
import time
from pattern.web import Twitter, hashtags
from pattern.db  import Datasheet, pprint, pd
from pattern.en  import sentiment

try: 
    table = Datasheet.load(pd("test.csv"))
    index = set(table.columns[0])
except:
    table = Datasheet()
    index = set()

engine = Twitter(language="en")

prev = None
for i in range(1000):
    print i
    for tweet in engine.search("from:username", start=prev, cached=False):
            if len(table) == 0 or tweet.id not in index:
            table.append([tweet.id, tweet.date, sentiment(tweet.text.encode("iso-8859-15", "replace"))])
            index.add(tweet.id)
        prev = tweet.id
    # sleep time to avoid search limit error (180 requests per 15min window)
    time.sleep(5.1)


table.save(pd("test.csv"))

print "Total results:", len(table)
print

2 个回答

0

爬取推特上的推文并不是一个很好的方法,但只要推特不封锁你的爬虫程序,这个方法还是可以用的。不过我建议你使用推特的API(应用程序接口),包括流式API和搜索API。这样你可以轻松获取推文,把它们存储到数据库里,然后进行你想要的任何分析。

0

与其去抓取数据,我建议你使用Twitter的流式API。这样你能获取到比抓取更多的推文,几乎所有的推文都能拿到,只要没有达到1%的速率限制。这个API还提供了一些过滤器,你可以用来筛选推文。

用于Twitter流式API的Python模块有:

  • Twython
  • twitter
  • tweepy

等等……

我使用的是Twython,感觉不错。希望这对你有帮助。

撰写回答