Twitter requests.exceptions.ChunkedEncodingError:(';连接断开:未完成读取(读取0个字节,预期会多读取512个字节)';未完成读取
我想写一个程序,从Twitter上获取推文,然后进行情绪分析。我写了以下代码,即使导入了所有必要的库,也出现了错误。我对数据科学比较陌生,请帮助我。 我无法理解此错误的原因:Twitter requests.exceptions.ChunkedEncodingError:(';连接断开:未完成读取(读取0个字节,预期会多读取512个字节)';未完成读取,twitter,python-requests,sentiment-analysis,chunked-encoding,Twitter,Python Requests,Sentiment Analysis,Chunked Encoding,我想写一个程序,从Twitter上获取推文,然后进行情绪分析。我写了以下代码,即使导入了所有必要的库,也出现了错误。我对数据科学比较陌生,请帮助我。 我无法理解此错误的原因: class TwitterClient(object): def __init__(self): # keys and tokens from the Twitter Dev Console consumer_key = 'XXXXXXXXX' consumer_secret = 'XXXXX
class TwitterClient(object):
def __init__(self):
# keys and tokens from the Twitter Dev Console
consumer_key = 'XXXXXXXXX'
consumer_secret = 'XXXXXXXXX'
access_token = 'XXXXXXXXX'
access_token_secret = 'XXXXXXXXX'
api = Api(consumer_key, consumer_secret, access_token, access_token_secret)
def preprocess(tweet, ascii=True, ignore_rt_char=True, ignore_url=True, ignore_mention=True, ignore_hashtag=True,letter_only=True, remove_stopwords=True, min_tweet_len=3):
sword = stopwords.words('english')
if ascii: # maybe remove lines with ANY non-ascii character
for c in tweet:
if not (0 < ord(c) < 127):
return ''
tokens = tweet.lower().split() # to lower, split
res = []
for token in tokens:
if remove_stopwords and token in sword: # ignore stopword
continue
if ignore_rt_char and token == 'rt': # ignore 'retweet' symbol
continue
if ignore_url and token.startswith('https:'): # ignore url
continue
if ignore_mention and token.startswith('@'): # ignore mentions
continue
if ignore_hashtag and token.startswith('#'): # ignore hashtags
continue
if letter_only: # ignore digits
if not token.isalpha():
continue
elif token.isdigit(): # otherwise unify digits
token = '<num>'
res += token, # append token
if min_tweet_len and len(res) < min_tweet_len: # ignore tweets few than n tokens
return ''
else:
return ' '.join(res)
for line in api.GetStreamSample():
if 'text' in line and line['lang'] == u'en': # step 1
text = line['text'].encode('utf-8').replace('\n', ' ') # step 2
p_t = preprocess(text)
# attempt authentication
try:
# create OAuthHandler object
self.auth = OAuthHandler(consumer_key, consumer_secret)
# set access token and secret
self.auth.set_access_token(access_token, access_token_secret)
# create tweepy API object to fetch tweets
self.api = tweepy.API(self.auth)
except:
print("Error: Authentication Failed")
我试着在互联网上查找错误的原因,但找不到任何解决方案
错误是:
requests.exceptions.ChunkedEncodingError: ('Connection broken: IncompleteRead(0 bytes read, 512 more expected)', IncompleteRead(0 bytes read, 512 more expected))
我使用的是Python 2.7和最新版本的请求2.14。如果在发出请求时将stream设置为True,则请求无法释放回池的连接,除非您使用所有数据或调用Response.close。这可能会导致连接效率低下。如果您发现自己部分读取了请求正文(或者根本不读取它们)使用stream=True时,您应该在with语句中发出请求,以确保它始终处于关闭状态:
with requests.get('http://httpbin.org/get', stream=True) as r:
# Do things with the response here.
我也有同样的问题,但没有流,正如stone mini所说,只需在之前应用“with”子句,以确保在新请求之前关闭您的请求
with requests.request("POST", url_base, json=task, headers=headers) as report:
print('report: ', report)
实际上,基于django 2.7或更早版本的应用程序存在问题。默认情况下,django版本允许请求正文的内存大小为2.5mb 我在基于django 2.7的应用程序中也遇到了同样的问题,我刚刚更新了django应用程序的setting.py文件,我的URL(端点)在该文件中工作
DATA_UPLOAD_MAX_MEMORY_SIZE = None
我只是在应用程序的settings.py文件中添加了上述变量。
你也可以从
我很确定这对你会有用。对于那些像我一样只想避免错误并重新尝试连接的人,类似的东西可能会有所帮助
r = ''
while r == '':
try:
r = requests.get(Url, headers = headers)
except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError) as err:
log_(err + ' Put to sleep before retrying.')
time.sleep(100)
continue
这将捕获连接错误,例如
ConnectionError
或ChunkedEncodingError
,将脚本置于睡眠状态(如本例所示,持续100秒)然后重试连接。请注意,如果连接中断错误持续存在,上述脚本将无限次尝试…在尝试太长时间之前,您可能希望添加一个计数器来停止它。请考虑该问题不包含任何对请求的引用。get
,并且您的答案可能很难输入context.我同意上面的评论,但这对我有效!嗨,我也有同样的问题,但我不太明白如何从上面的评论中修复它。有人能举个例子吗:-),我正在使用Twithon…我的实现已经使用了一个with
子句,但是我仍然得到分块编码错误,所以我不认为这是问题的根源根据Django的文档,这只与服务器接收的POST请求相关(这是为了防止第三方上传可疑文件的安全措施)。由于OP正在下载推文,我猜他们使用的是GET请求,所以这不会有帮助
r = ''
while r == '':
try:
r = requests.get(Url, headers = headers)
except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError) as err:
log_(err + ' Put to sleep before retrying.')
time.sleep(100)
continue