如何抓取 Twitter (X.com) — 分步指南
2025/10/30


Palina Zabela
Content Manager, Octo Browser
在X.com上,您可以通过用户帖子跟踪市场趋势和消费者行为。但平台的官方API有其限制,因此网页抓取专家通过浏览器自动化从社交媒体平台收集信息。在本文中,我们将解释如何使用Playwright库和无头浏览器抓取X.com上的推文、个人资料、搜索结果、回复和时间轴。
在X.com上,您可以通过用户帖子跟踪市场趋势和消费者行为。但平台的官方API有其限制,因此网页抓取专家通过浏览器自动化从社交媒体平台收集信息。在本文中,我们将解释如何使用Playwright库和无头浏览器抓取X.com上的推文、个人资料、搜索结果、回复和时间轴。
内容
为什么抓取推特 (X.com)
推特是用户行为、观点和当前趋势的数据来源。通过抓取X.com,您可以:
分析您的竞争对手。从推特上收集竞争对手的资料数据,以实时监控他们的营销策略、产品公告和受众反应。
发现趋势。收集推特上的热门标签,以便快速调整您的内容或产品迎合新趋势。
研究消费者。抓取推特上的评论、品牌提及和回复,帮助您了解客户的痛点和期望,从而改进产品并增加销售。
法律和道德方面
X.com禁止未经许可抓取其数据。违反这些规则可能导致账户和IP封禁。然而,判例法—尤其是在美国—承认抓取公开可用数据是合法的。例如,在2022年,美国第九巡回上诉法院确认,抓取公开可访问的信息并不违反《计算机欺诈和滥用法案》(CFAA)。
为了进一步保护自己,最好:
仅抓取公开数据;
避免抓取推特上的私人资料和直接信息;
在抓取时尊重允许的请求速率,以免过载X.com的服务器。
绕开X.com的封锁
X.com的安全系统分析用户行为的众多参数。因此,为了最大限度地保护免受网络抓取的封禁,请使用所有可用措施:
在抓取时合理地暂停请求。不仅要避免过载X.com的服务器,还要引入随机间隔,让请求看起来像是人类活动。
使用高质量代理。安全系统可能会阻止发送过多请求的某个IP地址。为了安全抓取,请使用代理并限制单个地址的请求数。
使用反检测浏览器。推特不仅通过行为和IP地址识别用户,还通过数字指纹识别,即设备参数的独特组合。指纹包括许多设置:操作系统版本、地理位置、时区和语言、已安装的字体和扩展程序等。因此,在抓取时,将代理与反检测浏览器结合使用。在这样的浏览器中,您可以创建具有不同指纹的虚拟配置文件,每个配置文件在X.com上看起来像是一个独立用户,而不是一个单一的抓取机器人。
重要提示:为每个X.com账户使用单独的虚拟配置文件,并将不同的代理与不同的IP连接到每个账户。这防止推特的安全系统通过相同的设备设置或IP链接您的账户,并因抓取而阻止您。
正确准备您的配置文件。要让推特信任您的账户,它们需要cookie。如果您从头创建一个新账户,请使用Octo Browser的Cookie机器人准备虚拟配置文件。如果您使用预先存在的X.com账户进行抓取,请从先前的浏览器导出cookie并导入Octo中。
如何抓取推文
要从X.com抓取帖子,您需要通过浏览器以无头模式加载网页(例如,Octo)并拦截后台请求。以下是使用开源Playwright库进行推文抓取的样子:
from playwright.sync_api import sync_playwright
def scrape_tweet(url: str) -> dict:
"""
Scrape a single tweet page for Tweet thread e.g.:
https://twitter.com/Scrapfly_dev/status/1667013143904567296
Return parent tweet, reply tweets and recommended tweets
"""
_xhr_calls = []
def intercept_response(response):
"""capture all background requests and save them"""
# we can extract details from background requests
if response.request.resource_type == "xhr":
_xhr_calls.append(response)
return response
with sync_playwright() as pw:
browser = pw.chromium.launch(headless=False)
context = browser.new_context(viewport={"width": 1920, "height": 1080})
page = context.new_page()
# enable background request intercepting:
page.on("response", intercept_response)
# go to url and wait for the page to load
page.goto(url)
page.wait_for_selector("[data-testid='tweet']")
# find all tweet background requests:
tweet_calls = [f for f in _xhr_calls if "TweetResultByRestId" in f.url]
for xhr in tweet_calls:
data = xhr.json()
return data['data']['tweetResult']['result']
if __name__ == "__main__": print(scrape_tweet("https://twitter.com/Scrapfly_dev/status/1664267318053179398"))
该脚本通过无头浏览器加载一条推文并拦截后台请求。然后过滤包含推文数据的请求。
注意:抓取时必须等到推文在HTML页面上出现——这表示后台请求已完成。
如何抓取资料
您可以以与推文相同的方式抓取X.com用户资料:在无头浏览器中捕获后台请求。使用以下算法获取资料元数据:
登录推特账户。
打开X.com上的用户页面。
提取名称、简介/描述、粉丝数量和账户创建日期。
添加延迟,以免推特将抓取器标记为可疑活动。
如何抓取搜索、回复和时间线
使用Playwright库您可以抓取甚至X.com的动态部分:
搜索。脚本模拟在推特的搜索栏中输入查询并按下回车。然后它滚动并提取数据,以抓取尽可能多的与关键字相关的帖子。
回复。要获取特定帖子的回复,Playwright打开该帖子的页面。脚本聚焦于评论区域,滚动以加载完整的线程,并抓取回复文本和作者名称。
时间线。脚本打开资料的主页并循环滚动,以抓取用户的所有最近帖子。
数据存储和导出
抓取后,结构化收集的数据。Playwright从HTML中提取数据,因此输出将是一个结构化记录列表(例如,Python字典)。您可以将其导出为CSV或Excel等表格格式,以便稍后加载到分析工具中。
分析收集的数据
一旦数据被抓取,您需要对其进行分析。根据您的目标,您可以使用不同的方法:
情感分析。评估帖子和回复的情感倾向,以了解用户对您的产品或竞争对手的感觉——积极的、消极的或中立的。
聚类。按主题对收集的帖子进行分组。对于一家产品公司,聚类可能如下所示:“交货投诉”,“积极的产品评价”,“功能请求”。
影响者识别。找到拥有大量粉丝和高参与度的用户,他们讨论您的行业。然后您可以联系他们进行合作,潜在地使他们成为品牌倡导者。
常见问题
抓取推特 (X.com)合法吗?
抓取公开可用数据本身并非非法。然而,X.com禁止抓取。技术上您可以抓取数据,但推特有权因违反平台规则而封锁您的账户或IP地址。
可以使用Python抓取推特吗?
可以,Python是一种用于网络抓取自动化的流行语言。您可以使用Playwright之类的库来抓取,这些库可以帮助绕过官方Twitter API的限制。
如何在不被屏蔽的情况下抓取推特?
为了降低因网络抓取而被禁止的风险,您应该:
使用代理。
使用反检测浏览器(例如,Octo Browser)创建具有不同数字指纹的配置文件,以便X.com的安全系统无法将您的活动追溯到单个用户。
在请求之间添加随机的、类似人类的延迟。
在反检测浏览器中保存cookie。
为什么抓取推特 (X.com)
推特是用户行为、观点和当前趋势的数据来源。通过抓取X.com,您可以:
分析您的竞争对手。从推特上收集竞争对手的资料数据,以实时监控他们的营销策略、产品公告和受众反应。
发现趋势。收集推特上的热门标签,以便快速调整您的内容或产品迎合新趋势。
研究消费者。抓取推特上的评论、品牌提及和回复,帮助您了解客户的痛点和期望,从而改进产品并增加销售。
法律和道德方面
X.com禁止未经许可抓取其数据。违反这些规则可能导致账户和IP封禁。然而,判例法—尤其是在美国—承认抓取公开可用数据是合法的。例如,在2022年,美国第九巡回上诉法院确认,抓取公开可访问的信息并不违反《计算机欺诈和滥用法案》(CFAA)。
为了进一步保护自己,最好:
仅抓取公开数据;
避免抓取推特上的私人资料和直接信息;
在抓取时尊重允许的请求速率,以免过载X.com的服务器。
绕开X.com的封锁
X.com的安全系统分析用户行为的众多参数。因此,为了最大限度地保护免受网络抓取的封禁,请使用所有可用措施:
在抓取时合理地暂停请求。不仅要避免过载X.com的服务器,还要引入随机间隔,让请求看起来像是人类活动。
使用高质量代理。安全系统可能会阻止发送过多请求的某个IP地址。为了安全抓取,请使用代理并限制单个地址的请求数。
使用反检测浏览器。推特不仅通过行为和IP地址识别用户,还通过数字指纹识别,即设备参数的独特组合。指纹包括许多设置:操作系统版本、地理位置、时区和语言、已安装的字体和扩展程序等。因此,在抓取时,将代理与反检测浏览器结合使用。在这样的浏览器中,您可以创建具有不同指纹的虚拟配置文件,每个配置文件在X.com上看起来像是一个独立用户,而不是一个单一的抓取机器人。
重要提示:为每个X.com账户使用单独的虚拟配置文件,并将不同的代理与不同的IP连接到每个账户。这防止推特的安全系统通过相同的设备设置或IP链接您的账户,并因抓取而阻止您。
正确准备您的配置文件。要让推特信任您的账户,它们需要cookie。如果您从头创建一个新账户,请使用Octo Browser的Cookie机器人准备虚拟配置文件。如果您使用预先存在的X.com账户进行抓取,请从先前的浏览器导出cookie并导入Octo中。
如何抓取推文
要从X.com抓取帖子,您需要通过浏览器以无头模式加载网页(例如,Octo)并拦截后台请求。以下是使用开源Playwright库进行推文抓取的样子:
from playwright.sync_api import sync_playwright
def scrape_tweet(url: str) -> dict:
"""
Scrape a single tweet page for Tweet thread e.g.:
https://twitter.com/Scrapfly_dev/status/1667013143904567296
Return parent tweet, reply tweets and recommended tweets
"""
_xhr_calls = []
def intercept_response(response):
"""capture all background requests and save them"""
# we can extract details from background requests
if response.request.resource_type == "xhr":
_xhr_calls.append(response)
return response
with sync_playwright() as pw:
browser = pw.chromium.launch(headless=False)
context = browser.new_context(viewport={"width": 1920, "height": 1080})
page = context.new_page()
# enable background request intercepting:
page.on("response", intercept_response)
# go to url and wait for the page to load
page.goto(url)
page.wait_for_selector("[data-testid='tweet']")
# find all tweet background requests:
tweet_calls = [f for f in _xhr_calls if "TweetResultByRestId" in f.url]
for xhr in tweet_calls:
data = xhr.json()
return data['data']['tweetResult']['result']
if __name__ == "__main__": print(scrape_tweet("https://twitter.com/Scrapfly_dev/status/1664267318053179398"))
该脚本通过无头浏览器加载一条推文并拦截后台请求。然后过滤包含推文数据的请求。
注意:抓取时必须等到推文在HTML页面上出现——这表示后台请求已完成。
如何抓取资料
您可以以与推文相同的方式抓取X.com用户资料:在无头浏览器中捕获后台请求。使用以下算法获取资料元数据:
登录推特账户。
打开X.com上的用户页面。
提取名称、简介/描述、粉丝数量和账户创建日期。
添加延迟,以免推特将抓取器标记为可疑活动。
如何抓取搜索、回复和时间线
使用Playwright库您可以抓取甚至X.com的动态部分:
搜索。脚本模拟在推特的搜索栏中输入查询并按下回车。然后它滚动并提取数据,以抓取尽可能多的与关键字相关的帖子。
回复。要获取特定帖子的回复,Playwright打开该帖子的页面。脚本聚焦于评论区域,滚动以加载完整的线程,并抓取回复文本和作者名称。
时间线。脚本打开资料的主页并循环滚动,以抓取用户的所有最近帖子。
数据存储和导出
抓取后,结构化收集的数据。Playwright从HTML中提取数据,因此输出将是一个结构化记录列表(例如,Python字典)。您可以将其导出为CSV或Excel等表格格式,以便稍后加载到分析工具中。
分析收集的数据
一旦数据被抓取,您需要对其进行分析。根据您的目标,您可以使用不同的方法:
情感分析。评估帖子和回复的情感倾向,以了解用户对您的产品或竞争对手的感觉——积极的、消极的或中立的。
聚类。按主题对收集的帖子进行分组。对于一家产品公司,聚类可能如下所示:“交货投诉”,“积极的产品评价”,“功能请求”。
影响者识别。找到拥有大量粉丝和高参与度的用户,他们讨论您的行业。然后您可以联系他们进行合作,潜在地使他们成为品牌倡导者。
常见问题
抓取推特 (X.com)合法吗?
抓取公开可用数据本身并非非法。然而,X.com禁止抓取。技术上您可以抓取数据,但推特有权因违反平台规则而封锁您的账户或IP地址。
可以使用Python抓取推特吗?
可以,Python是一种用于网络抓取自动化的流行语言。您可以使用Playwright之类的库来抓取,这些库可以帮助绕过官方Twitter API的限制。
如何在不被屏蔽的情况下抓取推特?
为了降低因网络抓取而被禁止的风险,您应该:
使用代理。
使用反检测浏览器(例如,Octo Browser)创建具有不同数字指纹的配置文件,以便X.com的安全系统无法将您的活动追溯到单个用户。
在请求之间添加随机的、类似人类的延迟。
在反检测浏览器中保存cookie。
随时获取最新的Octo Browser新闻
通过点击按钮,您同意我们的 隐私政策。
随时获取最新的Octo Browser新闻
通过点击按钮,您同意我们的 隐私政策。
随时获取最新的Octo Browser新闻
通过点击按钮,您同意我们的 隐私政策。



