Project Icon

twitter-scraper

无需API密钥的Twitter数据采集库

这是一个开源的Twitter数据采集库,通过反向工程前端JavaScript API实现功能。支持用户认证、获取推文、搜索内容和用户资料、获取趋势等操作,无速率和使用限制。该库提供高速数据获取,支持HTTP和SOCKS5代理,以及自定义请求延迟设置。适用于Twitter数据分析和研究工作。

Twitter 爬虫

Go 参考

Twitter 的 API 使用起来很烦人,而且有很多限制—— 幸运的是,他们的前端(JavaScript)有自己的 API,我对其进行了逆向工程。 没有 API 速率限制。不需要令牌。没有限制。速度极快。

您可以使用这个库轻松获取任何用户的推文内容。

安装

go get -u github.com/n0madic/twitter-scraper

使用方法

认证

现在所有方法都需要认证!

登录

err := scraper.Login("用户名", "密码")

使用用户名登录,而不是电子邮件! 但如果您有邮箱确认,请额外使用电子邮件地址:

err := scraper.Login("用户名", "密码", "电子邮件")

如果您启用了两步验证,请使用验证码:

err := scraper.Login("用户名", "密码", "验证码")

可以通过以下方式检查登录状态:

scraper.IsLoggedIn()

注销(清除会话):

scraper.Logout()

如果您想在重启之间保存会话,可以使用 scraper.GetCookies() 保存 cookies,并使用 scraper.SetCookies() 恢复。

例如,保存 cookies:

cookies := scraper.GetCookies()
// 序列化为 JSON
js, _ := json.Marshal(cookies)
// 保存到文件
f, _ = os.Create("cookies.json")
f.Write(js)

加载 cookies:

f, _ := os.Open("cookies.json")
// 从 JSON 反序列化
var cookies []*http.Cookie
json.NewDecoder(f).Decode(&cookies)
// 加载 cookies
scraper.SetCookies(cookies)
// 检查登录状态
scraper.IsLoggedIn()

开放账户

如果您不想使用自己的账户,可以尝试以 Twitter 应用程序身份登录:

err := scraper.LoginOpenAccount()

获取用户推文

package main

import (
    "context"
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    err := scraper.LoginOpenAccount()
    if err != nil {
        panic(err)
    }
    for tweet := range scraper.GetTweets(context.Background(), "Twitter", 50) {
        if tweet.Error != nil {
            panic(tweet.Error)
        }
        fmt.Println(tweet.Text)
    }
}

看起来您最多可以请求 50 条推文。

获取单条推文

package main

import (
    "fmt"

    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    err := scraper.Login(username, password)
    if err != nil {
        panic(err)
    }
    tweet, err := scraper.GetTweet("1328684389388185600")
    if err != nil {
        panic(err)
    }
    fmt.Println(tweet.Text)
}

使用标准运算符搜索推文

现在搜索功能仅适用于已认证用户!

包含 "twitter"、"scraper" 和 "data",并过滤掉转发的推文:

package main

import (
    "context"
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    err := scraper.Login(username, password)
    if err != nil {
        panic(err)
    }
    for tweet := range scraper.SearchTweets(context.Background(),
        "twitter scraper data -filter:retweets", 50) {
        if tweet.Error != nil {
            panic(tweet.Error)
        }
        fmt.Println(tweet.Text)
    }
}

搜索在获取 50 条推文后结束。

查看规则和过滤以构建标准查询。

设置搜索模式

scraper.SetSearchMode(twitterscraper.SearchLatest)

选项:

  • twitterscraper.SearchTop - 默认模式
  • twitterscraper.SearchLatest - 实时模式
  • twitterscraper.SearchPhotos - 图片模式
  • twitterscraper.SearchVideos - 视频模式
  • twitterscraper.SearchUsers - 用户模式

获取个人资料

package main

import (
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    scraper.LoginOpenAccount()
    profile, err := scraper.GetProfile("Twitter")
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v\n", profile)
}

按查询搜索个人资料

package main

import (
    "context"
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New().SetSearchMode(twitterscraper.SearchUsers)
    err := scraper.Login(username, password)
    if err != nil {
        panic(err)
    }
    for profile := range scraper.SearchProfiles(context.Background(), "Twitter", 50) {
        if profile.Error != nil {
            panic(profile.Error)
        }
        fmt.Println(profile.Name)
    }
}

获取趋势

package main

import (
    "fmt"
    twitterscraper "github.com/n0madic/twitter-scraper"
)

func main() {
    scraper := twitterscraper.New()
    trends, err := scraper.GetTrends()
    if err != nil {
        panic(err)
    }
    fmt.Println(trends)
}

使用代理

支持 HTTP(s) 和 SOCKS5 代理

使用 HTTP

err := scraper.SetProxy("http://localhost:3128")
if err != nil {
    panic(err)
}

使用 SOCKS5

err := scraper.SetProxy("socks5://localhost:1080")
if err != nil {
    panic(err)
}

延迟请求

在 API 请求之间添加延迟(以秒为单位)

scraper.WithDelay(5)

加载包含回复的时间线

scraper.WithReplies(true)
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号