in

如何爬取Twitter数据?(Python实例)

如何使用Python爬取Twitter数据:详细教程

如何爬取Twitter数据

Twitter作为主流社交平台,拥有丰富的公开数据源。合理利用数据爬取可以实现情感分析、趋势监测等目的。本教程将手把手教你如何使用Python的SNScrape库爬取Twitter。

如果您计划爬取社交媒体数据,Twitter是最好的目标平台之一。拥有2.3亿月活跃用户,它提供了大量有价值的信息。您可以通过进行情感分析、发现市场趋势和改进营销策略等多种方式来利用它。
尽管Twitter在提供数据访问方面非常慷慨,但官方API需要经过筛选流程,并施加了相当多的限制。为了克服这些问题,您将不得不寻找替代方法,其中网络爬虫是最佳选择。
本指南将教您如何进行Twitter数据爬取,并介绍API替代方案以及可能遇到的挑战。此外,您还将找到一个逐步示例,演示如何使用SNScrape爬取公开可用的Twitter数据。

什么是 Twitter 爬取 – 定义

Twitter 爬取是一种从社交媒体平台自动收集公共数据的方法。通常使用预制的爬取工具或定制的网络爬取工具来完成。Twitter 是提供官方 API 的少数平台之一,但使用起来可能会很麻烦,因为它限制了您可以获得的推文数量(3,200 条)及其新近度(最近 7 天)。

社交媒体营销人员利用 Twitter 的受欢迎程度来发挥自己的优势。他们收集(转发)推文、分享、URL、点赞、话题和关注者等信息。爬取 Twitter 可以深入了解影响者营销、品牌和声誉监控、情绪分析或市场趋势。

爬取 Twitter 合法吗?

尽管没有法规禁止爬取行为,但您必须注意爬取社交媒体平台,因为事情可能会变得很棘手。

我们不是律师,但美国第九巡回上诉法院裁定,如果满足以下条件,您可以爬取社交媒体数据:1) 社交媒体数据是公开可用的(不会隐藏在登录后),并且 2) 内容不受知识产权保护。然后,如果您要使用个人信息,可能还有一些额外的要求。

Twitter比其他平台有更多的回旋余地;其服务条款 (ToS) 并不禁止网络爬取,但需要您事先同意。尽管这些条款在没有帐户的情况下进行爬取时不具有法律约束力,但您仍然可能会被禁止使用该平台。

由于网络爬取问题并不总是那么简单,因此明智的做法是寻求法律建议。每个用例都是单独考虑的:为研究目的收集数据比为商业用途收集数据时拥有更多的自由。

正确的爬取姿势

  • 只爬取公开数据,不要侵犯隐私
  • 控制爬取速度,不要过于频繁
  • 使用代理IP,避免被封号

那么,无需登录即可爬取哪些数据?

让我们将您可以爬取的 Twitter 数据点分为三类:

  • 推文:文本和视觉媒体、推文 URL、推文 ID、转发、策划推文到位置或点赞。
  • 个人资料:姓名、图片、关注者和推文计数、用户简介、最新帖子数据(如内容、时间、转发、回复等)。
  • 标签和关键字:推文 URL、创建时间、提及、位置、用户名、回复和引用计数、对话 IF、转发、链接等媒体数据、类型等。

然而,Twitter 越来越要求登录才能查看其内容。去年,Reddit 社区报告了许多有关 Twitter 决定将更多内容移至登录表单后的问题。您可能会在网站的各个区域中遇到这种情况,例如在 Twitter 线程中向下滚动时。

目前,有一个简单的解决方法:清除浏览器 cookie。但是,门禁内容对于网络爬取社区来说意味着什么呢?可以预见的是,未来可供收集的公开数据点将会减少。

如何在没有 API 的情况下爬取 Twitter

除了使用官方 API 之外,还有多种方法可以从 Twitter 收集公开数据。

一种是使用网络爬取库自己构建一个爬取器。这可能是最难的方法,但它也为您提供了最大的控制权,特别是当您遇到其他方法的限制时。虽然爬取 Twitter 比在 Instagram 上收集数据更容易,但您仍然需要使用无头浏览器来呈现 JavaScript,并结合Twitter 代理来避免您的 IP 被阻止。

如果您不喜欢干扰代码,可以使用商业无代码爬取工具,例如 PhantomBuster 和 ParseHub。这些可视化工具提供方便的模板或点击式界面。虽然简单的任务很容易完成,但一旦规模扩大,它们就会变得越来越复杂和低效。

最后,您可以使用预制的 Twitter 网络爬取库之一。这些工具允许您通过在代码编辑器或命令行中输入命令来提取数据。它们不需要 API 身份验证或代理即可工作。SNScrape 就是一个例子;Twint 曾经是另一个,但已不再维护。

如何使用 Python 爬取 Twitter 数据:分步指南

本文将以示例代码为基础,为您详细讲解如何使用Python的SNScrape库来爬取Twitter公开数据,包括搜索结果、用户资料、主题标签等信息。我们会一步一步进行,确保初学者也能轻松上手。

SNScrape概述

在本示例中,我们将使用SNScrape Python 库来爬取 Twitter 。这是 Twitter 爬取的热门选择,因为:

SNScrape是一个Python库,可以帮助我们爬取Twitter上公开可见的数据。相比Twitter API,它的优势在于:

  • 不受推文数量限制的约束
  • 可以爬取超过7天的历史数据
  • 使用简单,无需API认证

SNScrape包含不同的模块用于爬取Twitter的各个方面,比如搜索结果、用户资料等。它可以爬取的数据包括:

  • 搜索结果
  • 用户资料
  • 主题标签
  • 单条推文
  • 推文线程
  • 列表帖子
  • 趋势等

接下来我们就通过详细的代码示例来看看如何使用SNScrape。+

准备工作

使用SNScrape前,需要通过pip安装它:

pip install snscrape

然后创建一个python文件,例如twitter_scraper.py,作为我们的代码编辑文件。

导入需要的模块:

from snscrape.modules import twitter
import json
  • snscrape.modules.twitter: SNScrape中的Twitter爬虫模块
  • json: 用于解析和处理JSON格式数据

爬取Twitter搜索结果

Twitter的搜索结果页面包含针对某一搜索词的相关推文。要爬取搜索结果,我们可以这样编写:

# 搜索词
query = 'python' 

# 爬取函数
def scrape_search(query):
  scraper = twitter.TwitterSearchScraper(query)
  return scraper

这里我们定义了搜索词”python”,并创建了一个scrape_search函数,它会使用TwitterSearchScraper来爬取搜索结果。

在主循环中,我们遍历爬取结果,并做解析与输出:

for item in scraper.get_items():

  # 转换为JSON格式
  json_data = json.loads(item.json())  

  # 打印输出推文内容   
  print(json_data['content'])

  # 保存结果到文件
  with open(output_file, 'w') as f:
    f.write(item.json())

这里我们定义了搜索词”python”,并创建了一个scrape_search函数,它会使用TwitterSearchScraper来爬取搜索结果。

在主循环中,我们遍历爬取结果,并做解析与输出:

for item in scraper.get_items():

  # 转换为JSON格式
  json_data = json.loads(item.json())  

  # 打印输出推文内容   
  print(json_data['content'])

  # 保存结果到文件
  with open(output_file, 'w') as f:
    f.write(item.json())
  • 首先将item转换为JSON格式,才能访问数据字段
  • 然后我们打印了推文的内容
  • 同时还把结果保存到了文件中

添加数量限制:

if max_results and i > max_results:
  break

这样我们就实现了一个简单的Twitter搜索结果爬虫。运行它就可以爬取关键词”python”的搜索结果了。

爬取Twitter标签

如果要爬取使用特定标签的推文,可以使用TwitterHashtagScraper:

hashtag = 'python' 

def scrape_hashtag(hashtag):
  scraper = twitter.TwitterHashtagScraper(hashtag)
  return scraper

将上例中的TwitterSearchScraper替换为TwitterHashtagScraper,传入标签名称,就可以爬取包含该标签的推文。

标签名称不需要添加#符号。其他的解析与输出过程同搜索结果。

爬取Twitter用户资料

要爬取某个用户的资料和推文,可以通过用户名或用户ID实现:

username = 'PythonWeekly'

def scrape_user(username):
  scraper = twitter.TwitterUserScraper(username)
  return scraper

这里我们先定义了要爬取的用户名,然后创建了scrape_user函数,通过TwitterUserScraper来爬取用户数据。

将上例中的搜索函数替换为该函数,就可以爬取指定用户的资料了。

爬取Twitter单条推文

有时我们只需要爬取某一条推文的内容,这时可以直接通过推文的ID来实现:

tweet_id = 1523456789

def scrape_tweet(tweet_id):
  scraper = twitter.TwitterTweetScraper(tweet_id)
  return scraper

TwitterTweetScraper会按照给定的ID抓取对应的推文。其余的数据解析逻辑同上。

综上所述,我们可以得出一个完整的Twitter爬虫脚本:

from snscrape.modules import twitter
import json

# 搜索词  
query = 'python'

# 用户名
username = 'PythonWeekly' 

# 推文ID
tweet_id = 1523456789  

# 爬取搜索结果
def scrape_search(query):
  scraper = twitter.TwitterSearchScraper(query)
  return scraper

# 爬取用户资料
def scrape_user(username):
  scraper = twitter.TwitterUserScraper(username)
  return scraper

# 爬取推文  
def scrape_tweet(tweet_id):
  scraper = twitter.TwitterTweetScraper(tweet_id)
  return scraper

for item in scraper.get_items():

  # 解析JSON
  json_data = json.loads(item.json())

  # 输出  
  print(json_data['content'])

  # 保存结果
  with open(file, 'w') as f: 
    f.write(item.json())

  # 数量限制
  if max_results and i > max_results:
    break

通过上面的示例,我们学习了如何使用SNScrape的不同模块来爬取Twitter的搜索结果、标签、用户和推文。

Scrapy的优势在于使用简单,可以方便地抓取公开的数据,不受限制。遵循类似的代码范式,你就可以爬取Twitter上的各类数据。

上面给出的只是一个基础的示例,你还可以添加代理、用户验证等功能来丰富你的Twitter爬虫。

常见问题

Without API key运行吗?

是的,SNScrape不需要任何API密钥就可以运行。

可以爬历史数据吗?

可以爬取7天以前的推文。

可以保存哪些字段?

推文内容、日期、用户名等各种字段可以保存为JSON。

如何避免被封号?

添加时间延迟,不要大量高频爬取,使用代理IP等方法。

是否可以爬取私密账户?

不能,只能爬取公开信息。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)