Python中如何抓取Twitter一个话题下的内容,比如美国大选这个话题?

我看了一下 https://github.com/bear/python-twitter 这个官方的 API, 似乎没有这个功能。

然后我想用 selenium 抓似乎有限制, 只能看到很少的一部分。


Python中如何抓取Twitter一个话题下的内容,比如美国大选这个话题?
2 回复
import snscrape.modules.twitter as sntwitter
import pandas as pd

def scrape_twitter_topic(query, max_tweets=100):
    """
    抓取Twitter话题内容
    
    Args:
        query: 搜索查询字符串,例如"美国大选 lang:zh"
        max_tweets: 最大推文数量
    """
    tweets_list = []
    
    # 使用snscrape搜索推文
    for i, tweet in enumerate(
        sntwitter.TwitterSearchScraper(query).get_items()
    ):
        if i >= max_tweets:
            break
            
        tweets_list.append({
            'date': tweet.date,
            'id': tweet.id,
            'content': tweet.content,
            'username': tweet.user.username,
            'like_count': tweet.likeCount,
            'retweet_count': tweet.retweetCount,
            'reply_count': tweet.replyCount
        })
    
    # 创建DataFrame
    df = pd.DataFrame(tweets_list)
    return df

# 使用示例
if __name__ == "__main__":
    # 搜索"美国大选"相关推文,限制中文内容,抓取50条
    query = "美国大选 lang:zh"
    df_tweets = scrape_twitter_topic(query, max_tweets=50)
    
    # 显示前5条结果
    print(df_tweets.head())
    
    # 保存到CSV文件
    df_tweets.to_csv('us_election_tweets.csv', index=False, encoding='utf-8-sig')

关键点说明:

  1. 使用snscrape库:这是目前最稳定的Twitter数据抓取方案,不需要API密钥
  2. 查询语法
    • "美国大选":搜索关键词
    • lang:zh:限制中文推文(可选)
    • 其他可用参数:since:2023-01-01 until:2023-12-31(时间范围)
  3. 获取的数据包括:发布时间、推文ID、内容、用户名、点赞/转发/回复数

安装依赖:

pip install snscrape pandas

注意事项:

  • Twitter的访问限制可能变化,建议合理设置抓取频率
  • 商业用途需遵守Twitter开发者条款

一句话建议:用snscrape配合查询语法直接抓,比API更省事。


search/tweets.json

回到顶部