使用Twitter API获取推特数据

最近由于实验室研究需求,需要对Twitter15及Twitter16数据集进行扩展。具体为:1.根据user_id,获取用户画像;2.根据tweet_id,获取推文下的评论。

连接TwitterAPI

首先根据自己申请的推特开发者账号,去连接Twitter API

import tweepy
import time
import csv
import pandas as pd
import json
from collections import OrderedDict
import datetime
import re# 填写twitter提供的开发Key和secret
consumer_key = 'XXX'
consumer_secret = 'XXX'
access_token = 'XXX'
access_token_secret = 'XXX'# 提交你的Key和secret
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)# 获取类似于内容句柄的东西
api = tweepy.API(auth, proxy='127.0.0.1:7890')

读取tweet_id

# 获取所有的tweet_id
with open('uid.csv','r',encoding='utf-8') as f1:reader = csv.reader(f1)tweets_id = [row[0] for row in reader]print(tweets_id)print(len(tweets_id))
f1.close()

根据tweet_id爬取推文评论

for tweet_id in tweets_id:print(f"正在获取 tweet_id = %s 的推特的评论..." % tweet_id)with open('comments_id/' + tweet_id + '.csv', 'r', encoding='utf-8') as f2:reader = csv.reader(f2)comments_id = [row[0] for row in reader]with open('comments/' + tweet_id + '.csv', 'a', encoding='utf-8') as f3:for comment_id in comments_id:print(f"正在获取 comment_id = %s 的评论内容..." % comment_id)flag = 0while flag == 0:try:comment = api.get_status(id=comment_id).text# print(type(comment))except Exception as e:print(repr(e))if repr(e) == "TweepError([{'code': 179, 'message': 'Sorry, you are not authorized to see this status.'}])":print("没有权限查看此条评论!")flag = 1comment_list = [comment_id,]breakelif repr(e) == "TweepError([{'code': 144, 'message': 'No status found with that ID.'}])":print("此条评论已被删除!")flag = 1comment_list = [comment_id, ]breakelif repr(e) == "TweepError([{'code': 63, 'message': 'User has been suspended.'}])":print("用户被冻结!")flag = 1comment_list = [comment_id, ]breakelif repr(e) == "TweepError([{'code': 34, 'message': 'Sorry, that page does not exist.'}])":print("该页面不存在!")flag = 1comment_list = [comment_id, ]breakelse:print("网络不稳定,正常重新连接...")flag=0else:flag = 1print("成功找的此条评论!")print(comment)pattern1 = re.compile(r'\@(?:.|\s)*? ')comment = ''.join(re.sub(pattern1, '', comment))pattern2 = re.compile(r'\@(?:.|\s)*?$')comment = ''.join(re.sub(pattern2,'',comment))comment = ''.join(re.sub('@','',comment))pattern3 = re.compile(r'\n')comment = ''.join(re.sub(pattern3, ' ', comment))print(comment)comment_list = [comment_id, comment]breakwriter = csv.writer(f3)writer.writerows([comment_list])f3.close()f2.close()

读取所有的user_id

# 获取所有的user_id
with open('uid.csv','r',encoding='utf-8') as f1:reader = csv.reader(f1)user_ids = [row[1] for row in reader]print(user_ids)print(len(user_ids))

根据user_id爬取用户画像

# 获取所有的user_id
with open('uid.csv','r',encoding='utf-8') as f1:reader = csv.reader(f1)user_ids = [row[1] for row in reader]print(user_ids)print(len(user_ids))for user_id in user_ids:print(f"正在查找用户ID=%s的用户信息..." % user_id)flag = 0while flag == 0:try:User = api.get_user(user_id=user_id)except Exception as e:print(repr(e))if repr(e) == "TweepError: [{'code': 50, 'message': 'User not found.'}]":print('用户不存在!')with open('user_not_found.csv','a',encoding='utf-8') as f:writer = csv.writer(f)writer.writerows(user_id)f.close()flag = 1breakelif repr(e) == "TweepError: [{'code': 50, 'message': 'User not found.'}]":print('用户被冻结!')with open('user_has_been_suspended.csv','a',encoding='utf-8') as f:writer = csv.writer(f)writer.writerows(user_id)f.close()flag = 1breakelse:print("网络不稳定,正在尝试重新连接...")flag = 0else:flag = 1user_dict = {"user_id":user_id}user_dict["name"] = User.nameuser_dict["screen_name"] = User.screen_nameuser_dict["location"] = User.locationuser_dict["profile_location"] = User.profile_locationuser_dict["description"] = User.descriptionuser_dict["protected"] = User.protecteduser_dict["followers_count"] = User.followers_countuser_dict["friends_count"] = User.friends_countuser_dict["listed_count"] = User.listed_countuser_dict["created_at"] = str(User.created_at)user_dict["favourites_count"] = User.favourites_countuser_dict["utc_offset"] = User.utc_offsetuser_dict["time_zone"] = User.time_zoneuser_dict["geo_enabled"] = User.geo_enableduser_dict["verified"] = User.verifieduser_dict["statuses_count"] = User.statuses_countuser_dict["lang"] = User.languser_dict["contributors_enabled"] = User.contributors_enableduser_dict["is_translator"] = User.is_translatoruser_dict["is_translation_enabled"] = User.is_translation_enableduser_dict["profile_background_tile"] = User.profile_background_tileuser_dict["profile_use_background_image"] = User.profile_use_background_imageuser_dict["has_extended_profile"] = User.has_extended_profileuser_dict["default_profile"] = User.default_profileuser_dict["default_profile_image"] = User.default_profile_imageuser_dict["following"] = User.followinguser_dict["follow_request_sent"] = User.follow_request_sentuser_dict["notifications"] = User.notificationsuser_dict["translator_type"] = User.translator_typeprint(user_dict)json_str = json.dumps(user_dict, indent=4, ensure_ascii=False)with open(user_id + '.json', 'w',encoding='utf-8') as f2:f2.write(json_str)break# time.sleep(1)# f2.close()
f1.close()

Python连接Twitter API读取用户画像及推特评论相关推荐

  1. Python 使用 twitter API 获取twitter用户信息

    Python 使用 twitter API 获取twitter用户信息 1. 概述 twitter作为国外极其大众化的社交平台,具有大量的海外用户,平台流动数据量极大,是国外人群生活数据的重要来源之一 ...

  2. Python连接钉钉群机器人每天自动推送国外天气

    Python连接钉钉群机器人每天自动推送国外天气 一.天气获取 我使用的是openweather api,这个api的官方文档写的十分详细,链接:openweather 打开链接,界面如下: 目前只有 ...

  3. python抓取抖音用户画像,摩羯天蝎居然刷得最多?

    日刷抖音三百条,悠悠一笑乐逍遥,夜深忽醒窗外事,不知今夕是何年. 要从上个月说起,那天晚上准备睡觉了,然后朋友突然发来一个抖音热门视频. 一向一本正经苟于工作的我,竟然沉醉于小姐姐的甜蜜的笑容,加之想 ...

  4. 使用Hybris Commerce User API读取用户信息时,电话字段没有返回

    在使用Hybris Commerce User API读取一个user信息时,我遇到一个问题,在API返回的结构里没有包含期望看到的Phone字段. 仔细观察Swagger里对response结构的说 ...

  5. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法

    使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现: 下载包:paramiko import paramiko #服务器信息,主机名(IP地址).端口号.用户名及密码 hos ...

  6. Python利用Twitter API根据tweet id抓取tweet(via tweepy/twython)

    1.申请Twitter Developer账号 要抓取twitter平台信息的第一步是在Twitter Developer官方网站(https://developer.twitter.com/en)申 ...

  7. python连接mysql,并读取文件写入mysql

    PyMysql的使用 菜鸟教程:https://www.runoob.com/python3/python3-mysql.html(安装+介绍) # 导入pymysql模块 import pymysq ...

  8. python连接linux服务器读取txt文件_Python文件处理

    1.创建文件: f = file('myfile.txt','w')    #myfile 为文件名,w为写权限. f .write("hello world!")    #hel ...

  9. python用户画像_新闻个性化推荐系统源码之构建离线用户和文章特征

    我们完成了文章画像和用户画像的构建,画像数据主要是提供给召回阶段的各种召回算法使用.接下来,我们还要为排序阶段的各种排序模型做数据准备,通过特征工程将画像数据进一步加工为特征数据,以供排序模型直接使用 ...

最新文章

  1. 读书笔记:线上性能问题初步排查方法
  2. python Manager dict
  3. php python插件安装,小弟我的vim配置和插件 小型 python php IDE
  4. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
  5. URLConnection和HttpURLConnection类
  6. 在线涂鸦画板小程序源码
  7. k8s核心技术-Helm(概述)---K8S_Google工作笔记0044
  8. gstreamer实现sink插件的代码,及无法结束的问题
  9. javac编译java_使用javac编译java文件
  10. CAM350自动开短路检查教程
  11. 一张表带你了解自动化测试工具Parasoft VS TestBed
  12. 计算机专业就业方向 【转】
  13. Android开发者的Ane简单入门
  14. python气象卫星云图解析_02_中央气象台
  15. 本人写的一个傲娇的语句
  16. 【Python】 -- from module import * 、from module import function 与 import module
  17. Java如何dump文件
  18. ICA原理推导及代码实现
  19. 鸿蒙对象关系映射数据库
  20. 海伦司上市在即:“嚣张”气势堪比瑞幸,核心竞争力存不存在?

热门文章

  1. OpenCV系列之使用OCR手写数据集运行SVM | 五十六
  2. OpenCV系列之SIFT尺度不变特征变换 | 三十九
  3. python 根据a标签查找href的值
  4. java 线性计算器_java版科学计算器,支持表达式计算
  5. 【应用】西门子1200之自动装料和四节传送带
  6. 楼宇智能化豪门系列- 北斗武当之 江森自控
  7. vpwm的控制变频_PWM控制器SG3525的变频控制
  8. mysql自动导出查检数据发mail_centos7上定时将mysql数据导出并且发送到指定的邮箱...
  9. 网络性能监测工具smokeping
  10. Apache80端口被占用解决办法