我正在尝试下载一些推文以供研究之用,直到几天前代码都运行良好。
错误消息
> Traceback (most recent call last):
>
> File "<ipython-input-1-10547a7aea4c>", line 1, in <module>
> runfile('F:/twitter_locations_n_scraper/02_twitterscrapping.py', wdir='F:/twitter_locations_n_scraper')
>
> File
> "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py",
> line 668, in runfile
> execfile(filename, namespace)
>
> File
> "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py",
> line 108, in execfile
> exec(compile(f.read(), filename, 'exec'), namespace)
>
> File "F:/twitter_locations_n_scraper/02_twitterscrapping.py", line
> 70, in <module>
> for item in cursor.items(1000): # Remove the limit to 1000
>
> File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\cursor.py",
> line 49, in __next__
> return self.next()
>
> File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\cursor.py",
> line 197, in next
> self.current_page = self.page_iterator.next()
>
> File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\cursor.py",
> line 108, in next
> data = self.method(max_id=self.max_id, parser=RawParser(), *self.args, **self.kargs)
>
> File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\binder.py",
> line 250, in _call
> return method.execute()
>
> File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\binder.py",
> line 234, in execute
> raise TweepError(error_msg, resp, api_code=api_error_code)
>
> TweepError: Twitter error response: status code = 400
我确实尝试了假定的解决方案
api.update_status('Test')
但这对我不起作用,我确实更改了键,但仍然遇到相同的错误,两次重新安装了Tweepy软件包,但错误仍然存在。
感谢帮助解决错误,在此先感谢。
更新:我遇到错误的代码
import tweepy
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import pandas as pd
import json
import csv
import sys
import time
path="F:\\twitter_locations_n_scraper\\"
ckey = '*****'
csecret = '******'
atoken = '*****'
asecret = '*****'
def toDataFrame(tweets):
# COnvert to data frame
DataSet = pd.DataFrame()
DataSet['tweetID'] = [tweet.id for tweet in tweets]
DataSet['tweetText'] = [tweet.text.encode('utf-8') for tweet in tweets]
DataSet['tweetRetweetCt'] = [tweet.retweet_count for tweet in tweets]
DataSet['tweetFavoriteCt'] = [tweet.favorite_count for tweet in tweets]
DataSet['tweetSource'] = [tweet.source for tweet in tweets]
DataSet['tweetCreated'] = [tweet.created_at for tweet in tweets]
DataSet['userID'] = [tweet.user.id for tweet in tweets]
DataSet['userScreen'] = [tweet.user.screen_name for tweet in tweets]
DataSet['userName'] = [tweet.user.name for tweet in tweets]
DataSet['userCreateDt'] = [tweet.user.created_at for tweet in tweets]
DataSet['userDesc'] = [tweet.user.description for tweet in tweets]
DataSet['userFollowerCt'] = [tweet.user.followers_count for tweet in tweets]
DataSet['userFriendsCt'] = [tweet.user.friends_count for tweet in tweets]
DataSet['userLocation'] = [tweet.user.location for tweet in tweets]
DataSet['userTimezone'] = [tweet.user.time_zone for tweet in tweets]
DataSet['Coordinates'] = [tweet.coordinates for tweet in tweets]
DataSet['GeoEnabled'] = [tweet.user.geo_enabled for tweet in tweets]
DataSet['Language'] = [tweet.user.lang for tweet in tweets]
tweets_place= []
#users_retweeted = []
for tweet in tweets:
if tweet.place:
tweets_place.append(tweet.place.full_name)
else:
tweets_place.append('null')
DataSet['TweetPlace'] = [i for i in tweets_place]
#DataSet['UserWhoRetweeted'] = [i for i in users_retweeted]
return DataSet
OAUTH_KEYS = {'consumer_key':ckey, 'consumer_secret':csecret,'access_token_key':atoken, 'access_token_secret':asecret}
#auth = tweepy.OAuthHandler(OAUTH_KEYS['consumer_key'], OAUTH_KEYS['consumer_secret'])
auth = tweepy.AppAuthHandler('******', '*******')
api = tweepy.API(auth, wait_on_rate_limit=True,wait_on_rate_limit_notify=True)
if (not api):
print ("Can't Authenticate")
sys.exit(-1)
else:
df=pd.read_csv(path+"00_all_location_India_full.csv")
print ("Scraping data now") # Enter lat and long and radius in Kms
for i in range(0,len(df)):
x="%s,%s,30km"%(df['latitude'][i],df['longitude'][i]) #,q='motox4', since='2018-08-16',until='2018-08-18',
cursor = tweepy.Cursor(api.search,since='2018-08-23',until='2018-08-24',lang='en',count=1000)
results=[]
print (i)
for item in cursor.items(1000): # Remove the limit to 1000
results.append(item)
DataSet = toDataFrame(results)
DataSet['latitude']=df['latitude'][i]
DataSet['longitude']=df['longitude'][i]
DataSet['radius']=30
del DataSet['Coordinates']
DataSet.to_csv(path+'cities_aug23.csv',encoding='utf-8',index=False,mode="a")
答案 0 :(得分:1)
这是一个有趣的问题,实际上,您写问题的方式使我写下了这个答案,
您已经提到它正在运行,但不再起作用,因此在我看来这可能有两个原因……
浏览器已弃用浏览器中的某些功能,导致该脚本无法正常工作。也许您应该尝试在页面加载时阻止preventDefault()函数,看看是否出现任何错误。 尝试也更改您的Internet连接,或重新启动调制解调器 还要确保您从https网站而不是http加载此文件。
或者您在代码中列出的这些路径,可能没有读取该文件的权限,我对此路径有很大的疑问,但是您检查了所有路径并尝试关闭任何可能阻止与这些路径连接的内容。 / p>
C:\ ProgramData \ Anaconda3 \ lib \
因为它需要Windows身份验证才能访问它。请尝试从控制面板中最小化您的UAC权限。您也可以通过右键单击文件夹并选择属性来检查安全性选项卡。
所以,将所有内容恢复原状并检查上面的内容。 请让我知道结果,因为我可以根据您的重放结果对其进行编辑
希望我的帖子对您有帮助。
答案 1 :(得分:1)
根据twitter官方api页面。 代码400指示以下错误, 因此,您的问题是由以下原因之一引起的,请逐一检查:
-attachment_url参数无效与HTTP 400对应。提供的URL值不是可以附加到此Tweet的URL。
-错误的身份验证数据与HTTP 400对应。该方法需要身份验证,但未提供或完全无效。
-参数无效与HTTP 400对应。提供的URL值不是URL 可以附加到此Tweet。
-错误的请求该请求无效或无法通过其他方式提供。随附的错误消息将进一步说明。 未经身份验证的请求将被视为无效,并将产生此响应。
上载多张图片时,不允许使用动画GIF。对应于HTTP400。单个推文中只能附加一个动画GIF
-媒体ID的验证失败。对应于HTTP400。通过Tweet提交的媒体ID出现问题。
-找不到媒体ID。与HTTP 400对应。找不到附加到Tweet的媒体ID。
-给定的URL无效。与HTTP 400对应。无法处理Tweet中包含的URL。这可能是由于无法转换非ASCII URL或其他原因。
答案 2 :(得分:0)
Twitter最近对其API进行了重大更改,从而删除了Twitter客户端和抓取工具使用的大量功能。由于HTTP 400是“错误请求”,并且您的代码一直工作到最近(进行更改时),所以我可以肯定地说这是很安全的。参见details。