【发布时间】:2016-10-31 10:26:47
【问题描述】:
我想从 twitter 下载推文作为使用 Python Twitter API 进行情绪分析的数据集..
我正在使用 SemEval 2016 任务 6 数据集..所以我下载了“Domain corpus for task B”并找到了描述步骤的自述文件..
我只是一个初学者,我对python不太了解..我安装了python 3.4.3,我已经在scripts文件夹中找到了easy_install.exe和pip.exe..
我输入了 cmd :“easy_install twitter”,因为它写在自述文件中......然后我尝试应用自述文件中的步骤,以下是步骤:
第一次运行时,它应该打开一个网络浏览器,你登录了吗
Twitter,并显示一个 PIN 码供您输入由
生成的提示脚本。
在您的默认浏览器中使用您的用户名登录 Twitter。
像这样运行脚本以下载您的凭据:
python download_tweets_api.py --dist=Donald_Trump.txt -- output=downloaded_Donald_Trump.txt像这样下载推文:
python download_tweets_api.py --dist=Donald_Trump.txt --output=downloaded_Donald_Trump.txt
我完成了第 1 步,然后我输入了 cmd "download_tweets_api.py --dist=Donald_Trump.txt --output=downloaded_Donald_Trump.txt" 但文件的最后一行出现错误
TypeError: sequence item 1:expected str instance, bytes found
这里是“download_tweets_api.py”文件的内容
import sys
import os
import time
import datetime
import argparse
from twitter import *
parser = argparse.ArgumentParser(description="downloads tweets")
parser.add_argument('--partial', dest='partial', default=None, type=argparse.FileType('r'))
parser.add_argument('--dist', dest='dist', default=None, type=argparse.FileType('r'), required=True)
parser.add_argument('--output', dest='output', default=None,type=argparse.FileType('w'), required=True)
args = parser.parse_args()
CONSUMER_KEY='xxxxxxxxxxx'
CONSUMER_SECRET='xxxxxxxxxxxxxxxxx'
MY_TWITTER_CREDS = os.path.expanduser('~/.my_app_credentials')
if not os.path.exists(MY_TWITTER_CREDS):
oauth_dance("Semeval sentiment analysis", CONSUMER_KEY, CONSUMER_SECRET, MY_TWITTER_CREDS)
oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS)
t = Twitter(auth=OAuth(oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET))
cache = {}
if args.partial != None:
for line in args.partial:
fields = line.strip().split("\t")
text = fields[-1]
sid = fields[0]
cache[sid] = text
for line in args.dist:
fields = line.strip().split('\t')
sid = fields[0]
while not sid in cache:
try:
text = t.statuses.show(_id=sid)['text'].replace('\n', ' ').replace('\r', ' ')
cache[sid] = text.encode('utf-8')
except TwitterError as e:
if e.e.code == 429:
rate = t.application.rate_limit_status()
reset = rate['resources']['statuses']['/statuses/show/:id'] ['reset']
now = datetime.datetime.today()
future = datetime.datetime.fromtimestamp(reset)
seconds = (future-now).seconds+1
if seconds < 10000:
sys.stderr.write("Rate limit exceeded, sleeping for %s seconds until %s\n" % (seconds, future))
time.sleep(seconds)
else:
cache[sid] = 'Not Available'
text = cache[sid]
args.output.write("\t".join(fields + [text]) + '\n')
请注意,您可以在“domain corpus for task B”中找到 download_tweets_api.py 和自述文件
【问题讨论】:
-
这里是从 cmd 捕获的错误:mediafire.com/view/0g5k3imjhmcyefc/errpython.JPG
-
这里是几个数据集的链接,我从中获得了提到的语料库alt.qcri.org/semeval2016/task6/index.php?id=data-and-tools
-
如果可以,您可能需要更改您的 CONSUMER_KEY 和密码。以后不要在公共论坛上发布这些价值观。就像在银行卡上写密码一样!