【Twitter 舆论分析】Twitter 实时推文爬虫

0x00 前言

继续探索Twitter API的使用,这次获取一下Twitter的实时推文。

0x01 具体步骤

1、sample-steam 样本流

这是Twitter提供的代码,比较简单,只需要更改一下"bearer_token"即可使用,相对获得的数据单一,满足不了需求,下文讲解如何设定搜索规则

# -*- codeing =utf-8 -*-
# @Time : 2021/11/22 10:47
# @Author:yuchuan
# @File : twitter-sample-steam.py
# @Software : PyCharm
import requests
import os
import json# To set your environment variables in your terminal run the following line:
# export 'BEARER_TOKEN'='<your_bearer_token>'
bearer_token = 'your bearer_token'#look like "AAAAAAAAAAAAAAAAAAAAOHKRwEAAAAAXF5NOvPXXUPATBLLo*********"def create_url():return "https://api.twitter.com/2/tweets/sample/stream"def bearer_oauth(r):"""Method required by bearer token authentication."""r.headers["Authorization"] = f"Bearer {bearer_token}"r.headers["User-Agent"] = "v2SampledStreamPython"return rdef connect_to_endpoint(url):response = requests.request("GET", url, auth=bearer_oauth, stream=True)print(response.status_code)for response_line in response.iter_lines():if response_line:json_response = json.loads(response_line)print(json.dumps(json_response, indent=4, sort_keys=True))if response.status_code != 200:raise Exception("Request returned an error: {} {}".format(response.status_code, response.text))def main():url = create_url()timeout = 0while True:connect_to_endpoint(url)timeout += 1if __name__ == "__main__":main()

简单更改过BEARER_TOKEN后,就可以得到下面这样的数据啦

{"data": {"id": "1462613720471900162","text": "RT @shinslighterr: nao mas e essa official art de shingeki eu to me mijando https://t.co/m63s6sFGsJ"}
}
{"data": {"id": "1462613720442581000","text": "RT @Corinthians: SE BUSCA RIVAL EN AMERICA \nSE BUSCA RIVAL EN AMERICA\nSE BUSCA RIVAL EN AMERICA\nSE BUSCA RIVAL EN AMERICA\nSE BUSCA RIVAL EN\u2026"}
}
{"data": {"id": "1462613720463331328","text": "@kimkai_kggk yuk, gwe jaga lilin yh loe muter\ud83d\ude0d"}
}

这个样本得到的只有单纯的id,text,如果你需要其他元数据就需要进阶版的Stream Tweets了,下面就开始进阶讲解

2、Stream Tweets in real-time

1、首先讲解一下搜索内容的添加规则

详细规则可参考:

https://developer.twitter.com/en/docs/twitter-api/tweets/filtered-stream/integrate/build-a-rule

{"value": "dog has:images", "tag": "dog pictures"},
{"value": "cat has:images -grumpy", "tag": "cat pictures"}

Example :

"cat has:images“:关键词”cat"且有图片

“tag":“cat images”:分配的标签

lang:en 仅过滤英语推文

def set_rules(delete):# You can adjust the rules if neededsample_rules = [{"value": "dog has:images", "tag": "dog pictures"},{"value": "cat has:images -grumpy", "tag": "cat pictures"},]payload = {"add": sample_rules}response = requests.post("https://api.twitter.com/2/tweets/search/stream/rules",auth=bearer_oauth,json=payload,)
   2、搜索内容的返回字段设定

成功连接到流之后,默认响应Tweet字段:id、text,如果要获取这之外的内容,可以通过设置fields和扩展参数来指定

https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet

这是Twitter给出的参考文件,关于field 和 expansion的说明,可以根据需要自己组合

比如我需要的内容有,author.id , tweets , entities ( hashtags , urls , mentions ) , public_metrics ( like , reply , retweet )

KeyValueReturned fields
tweet.fieldspublic_metricslike,reply,retweet
expansionsauthor_idincludes.users.id, includes.users.name, includes.users.username
tweet.fieldsentitieshashtags,urls,mentions

根据需要的扩展部分参数设定url,就可以获得相应的返回字段。

tweet_fields = "tweet.fields=public_metrics,entities"
"https://api.twitter.com/2/tweets/search/stream?{}&expansions=author_id".format(tweet_fields)
def get_stream(set):tweet_fields = "tweet.fields=public_metrics,entities"url = "https://api.twitter.com/2/tweets/search/stream?{}&expansions=author_id".format(tweet_fields)response = requests.get(url, auth=bearer_oauth, stream=True,)print(response.status_code)if response.status_code != 200:raise Exception("Cannot get stream (HTTP {}): {}".format(response.status_code, response.text))for response_line in response.iter_lines():if response_line:json_response = json.loads(response_line)print(json.dumps(json_response, indent=4, sort_keys=True))

3.总结一下

①set_rules(request.post)设定搜索内容

②get_stream(request.get)设定获取内容

0x02 实现代码:

发现了一个问题,因为我在设计搜索规则的时候debug了好几次,每一次我更改规则后,都是在原来关键词的stream中增加入新关键词的stream, 我查了一下应该是因为request.post的原因。总之,爬出的内容要进行过滤保存,过滤时精确一点即可,这个搜索出来的内容应该是不占用Twitter api中每月限制爬取数额的。

# -*- codeing =utf-8 -*-
# @Time : 2021/11/22 15:28
# @Author:yuchuan
# @File : twitter_stream_tweets.py
# @Software : PyCharm
import requests
import os
import json# To set your enviornment variables in your terminal run the following line:
# export 'BEARER_TOKEN'='<your_bearer_token>'
bearer_token ='<your_bearer_token>'#same as'AAAAAAAAAAAAAAAAAAAAAOHKRwEA**********'def bearer_oauth(r):"""Method required by bearer token authentication."""r.headers["Authorization"] = f"Bearer {bearer_token}"r.headers["User-Agent"] = "v2FilteredStreamPython"return r#
# def get_rules():
#     response = requests.get(
#         "https://api.twitter.com/2/tweets/search/stream/rules", auth=bearer_oauth
#     )
#     if response.status_code != 200:
#         raise Exception(
#             "Cannot get rules (HTTP {}): {}".format(response.status_code, response.text)
#         )
#     print(json.dumps(response.json()))
#     return response.json()
#
#
# def delete_all_rules(rules):
#     if rules is None or "data" not in rules:
#         return None
#
#     ids = list(map(lambda rule: rule["id"], rules["data"]))
#     payload = {"delete": {"ids": ids}}
#     response = requests.post(
#         "https://api.twitter.com/2/tweets/search/stream/rules",
#         auth=bearer_oauth,
#         json=payload
#     )
#     if response.status_code != 200:
#         raise Exception(
#             "Cannot delete rules (HTTP {}): {}".format(
#                 response.status_code, response.text
#             )
#         )
#     print(json.dumps(response.json()))
#
#
def set_rules():# You can adjust the rules if neededsample_rules = [{"value": "Russia",},]payload = {"add": sample_rules}response = requests.post("https://api.twitter.com/2/tweets/search/stream/rules",auth=bearer_oauth,json=payload,)if response.status_code != 201:raise Exception("Cannot add rules (HTTP {}): {}".format(response.status_code, response.text))print(json.dumps(response.json()))def get_stream(set):tweet_fields = "tweet.fields=public_metrics,entities"url = "https://api.twitter.com/2/tweets/search/stream?{}&expansions=author_id".format(tweet_fields)response = requests.get(url, auth=bearer_oauth, stream=True,)print(response.status_code)if response.status_code != 200:raise Exception("Cannot get stream (HTTP {}): {}".format(response.status_code, response.text))for response_line in response.iter_lines():if response_line:json_response = json.loads(response_line)print(json.dumps(json_response, indent=4, sort_keys=True))def main():# rules = get_rules()# delete = delete_all_rules(rules)set = set_rules()get_stream(set)if __name__ == "__main__":main()

0x03 一些闲话

本人创建了一个公众号,分享科研路上的小问题,新发现,欢迎关注公众号,给我留言!!!
一起奋发向上,攻克难题吧~~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21491.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 实现用户收藏新闻以及查看新闻(简易新闻 六)

Android 实现用户收藏新闻以及查看新闻&#xff08;简易新闻 六&#xff09; 效果图&#xff1a; 因为录制的gif过长无法上传&#xff0c;所以这里分为两段&#xff0c;一段是用户未登录状态下收藏新闻需登录&#xff0c;用户登录后可以收藏&#xff1a; 第二段用户未登录查看…

关于世界杯的一篇文章-ChatGPT

世界杯是国际足球的最高荣誉&#xff0c;每四年举办一届&#xff0c;是世界上最受欢迎的体育赛事之一。自1930年首届世界杯在乌拉圭举办以来&#xff0c;已经举办了20届。 由国际足联&#xff08;FIFA&#xff09;主办&#xff0c;每届比赛都会在举办国举行&#xff0c;由32支…

2021最近的新闻大事10条简短 今天的新闻大事10条汇总

每天精选2021最近的新闻大事10-12条&#xff0c;365资讯简报 汇总近期、今天的新闻大事。每一条热点新闻大事件都比较简短&#xff0c;可以用作新闻大事件摘抄素材&#xff01; 【365资讯简报】每天一分钟&#xff0c;知晓天下事&#xff01;2021年1月12日 星期二 农历十一月廿…

收藏|最全的LIMS实验室信息管理系统介绍

实验室信息管理系统(LIMS)&#xff0c;就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现代的管理思想有机结合&#xff0c;利用数据处理技术、海量数据存储技术、宽带传输网络技术、自动化仪器分析技术&#xff0c;来对实验…

使用大型语言模(LLM)构建系统(四):链式提示

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。 下面是我们访问大型语言模(LLM)的主要代码&#xff1a; import openai#您的openai的api key openai.api_key YOUR-OPENAI-API-KEY def get_…

AIGC - 生产力新工具 Bito AI

文章目录 Bito AI 是什么Bito AI 能干啥官网免费的吗&#xff1f;如何使用 Bito方式一&#xff1a;方式二&#xff1a;在这里插入图片描述方式三 Bito AI 是什么 Bito AI是继Github Copilot、Cursor、CodeWhisperer等AI智能编程产品之后发了一大AI编程工具 。 Bito是一款建立…

ChatGPT背后的技术

ChatGPT背后的技术InstructGPT&#xff0c;论文标题为 Training language models to follow instructions with human feedback。 语言模型(Language model)的原理是给一段文本&#xff0c;让它去预测后面下面的词是什么。在预训练中它的训练数据是没有标签的&#xff0c;是自…

揭密ChatGPT背后团队鲜为人知的小秘密

ChatGPT引领的人工智能技术浪潮还在持续火爆&#xff0c;可是做出这款产品的OpenAI公司&#xff0c;熬得住多年的冷板凳&#xff0c;最终一飞冲天&#xff0c;他们是怎么做到的呢&#xff1f; 因此&#xff0c;我对这家企业的组织建设产生了浓厚的兴趣。我找啊找&#xff0c;最…

一点就分享系列(实践篇6——上篇)【迟到补发_详解yolov8】Yolo-high_level系列融入YOLOv8 旨在研究和兼容使用【3月份开始持续补更】

一点就分享系列&#xff08;实践篇5-补更篇&#xff09;[迟到补发]—Yolo系列算法开源项目融入V8旨在研究和兼容使用[持续更新] 题外话 [最近一直在研究开放多模态泛化模型的应用事情&#xff0c;所以这部分内容会更新慢一些&#xff0c;文章和GITGUB更新并不同步&#xff0c;g…

基于OpenAI的gpt-3.5模型API实现个人助手服务

引言 网上有不少OpenAI的API资料&#xff0c;实测下来&#xff0c;可能是环境因素踩了不少坑&#xff0c;这里分享一下我实践成功的技术路线。出于篇幅考虑&#xff0c;本文不会对开发前的部分工作&#xff0c;例如openai账号注册&#xff0c;外网访问权限获取&#xff0c;java…

人人都可实测体验的ChatGPT来了

来源&#xff1a;量子位 所有人都能上手微软Bing了&#xff01; 今天&#xff0c;微软突然官宣全面开放BingChat&#xff1a; 无需任何等待。只需注册一个账户&#xff0c;首页即可体验。 更关键的是&#xff0c;还有一大堆堪称“家底”的新功能来袭&#xff01; 支持100种语言…

最快下载微软必应Bing搜索背景图片的方法

1.打开谷歌Chrome浏览器。 2.打开https://cn.bing.com/或https://cn.bing.com/ 3.CtrlShiftI 4.CtrlO 5.输入 jpg 6.点击链接 7.鼠标右键图片&#xff0c;选择最后两个菜单都能下载&#xff0c;个人偏好第三个 8.另存为即可 第4步 还可以使用CtrlF &#xff0c;在Eleme…

分享:企业内部通信 〖局域网QQ〗Bing(必应)1.0 正式发布,包括:聊天、视频、语音、电话、截屏、涂鸦、文件传输 等

分享&#xff1a;企业内部通信 〖局域网QQ〗Bing&#xff08;必应&#xff09;1.0 正式发布,包括&#xff1a;聊天、视频、语音、电话、截屏、涂鸦、文件传输 等 局域网QQ Bing&#xff08;必应&#xff09;1.0 正式发布 Bing&#xff08;必应&#xff09;是一款优秀的企业局…

【IDEA插件】 EasyCode

Easycode是idea的一个插件&#xff0c;可以直接对数据的表生成 entity,controller,service,dao,mapper,无需任何编码&#xff0c;简单而强大。 1、安装(EasyCode) img 我这里的话是已经那装好了。 建议大家再安装一个插件&#xff0c;Lombok。Lombok能通过注解的方式&#x…

IDEA集成chatGTP让你编码如虎添翼

如果您 还没有chatGTP账号,请移步以下文章中注册章节: ​​​​​​独立部署基于apiKey或accessToken的GPT聊天工具_云台095的博客-CSDN博客 IDEA集成chatGTP让你编码如虎添翼 第一步,打开您的IDEA, 打开首选项(Preference) -> 插件(Plugin) 在插件市场搜索 c…

Docker容器编排

Docker容器编排 简介为什么需要 Compose?安装docker-compose常用命令使用步骤小案例总结 简介 Compose&#xff08;容器编排&#xff09; 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-com…

云编排技术:探索您的选择

最近 IT 行业有很多围绕云编排的议论&#xff0c;而且许多人想知道云编排到底是怎么回事。本文将探索云编排的概念&#xff0c;以及它将如何融入云计算的大发展趋势中。我将分析各种编排工具并介绍它们之间的区别&#xff0c;使您能够更好地了解有哪些可用的选择。 首先&#x…

终于有本书讲清了ChatGPT和AIGC的前世今生!(文末送书)

AIGC的各大门派是谁&#xff1f;典型技术都有什么&#xff1f; AIGC为什么在绘画领域先破圈&#xff1f;ChatGPT的有哪些局限性&#xff1f; 为何科技企业争相推出大模型&#xff1f; 人类的创新能力会被AIGC取代吗…… 诸如此类的这些话题呈现爆发性增长&#xff0c;频频被科技…

ChatGPT等AIGC如何移动边缘部署?南洋理工最新《 在移动网络中释放边云生成AI的力量:AIGC服务》综述其技术体系...

人工智能生成内容(AIGC)是一种使用人工智能算法创造性地生成、操作和修改有价值和多样化数据的自动化方法。本文重点研究了ChatGPT和Dall-E等AIGC应用在移动边缘网络(mobile AIGC networks)中的部署&#xff0c;这些应用在维护用户隐私的同时&#xff0c;提供个性化和定制化的实…