2017-07-18 8 views
0

私は特定のtwitterユーザーのすべてのフォロワーを取得するpythonでスクレーパーを作成しました。問題は、ユーザーIDのこのリストを使ってlogstashで自分のつぶやきを取得すると、私はエラーが発生することです。 私はhttp://gettwitterid.com/を使って、これらのIDが機能しているかどうかを手動で確認しましたが、そのリストは実際にはリストを確認するのに本当に長いです。つぶやくことができるようにTwitter上のユーザーIDを確認する

IDを2つのリストに分割する解決策はありますか?1つは有効なIDを含み、もう1つは無効なものを含みます.tは有効なリストをlogstashの入力として使用しますか? CSVファイルの 最初の10行は次のようである: "ID" "602169027" "95104995" "874339739557670912" "2981270769" "93054327" "870723159011545088" "3008493180" "874804469082533888" "756339889092829184" "1077712806"

私はCSVファイルからインポートされたIDを使用してツイートを取得するには、このコードを試してみましたが、unfortunetlyそれは(見つかりません)144

import tweepy 
import pandas as pd 

consumer_key = "" 
consumer_secret = "" 
access_token_key = "-" 
access_token_secret = "" 

auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token_key, access_token_secret) 

api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True) 

dfuids = pandas.read_csv('Uids.csv') 
for index, row in dfuids.iterrows(): 
    print row['id'] 
tweet = api.get_status(dfuids['id']) 
を上げています

importing ids from csv

+0

はIDが無効な場合、あなたが期待まさに144ではないですか?あなたのドキュメントに無効なIDが含まれていますか?また、 'get_status'をループの外側から、' row'ではなく 'dfuids'から呼び出すのはなぜですか? – patrick

+0

問題は、すべてのIDが144(見つからない)、144のIDが問題のウェブサイトを使用して有効であることを手動で検出したことです。 すべてのIDが無効であるわけではありませんが、手動でこれを行うことはできません。 私は初心者のPythonユーザーですので、私はコーディングスキルを信頼しません! – lazurens

答えて

0

これにコードを変更してください:

for index, row in dfuids.iterrows(): 
    print row['id'] 
    tweet = api.get_status(row['id']) 

潜在的なエラーをエスケープするには、try/exceptloop後から追加することができます。

+0

問題は、csvからIDを読み取るときに同じ形式ではないと思います。オリジナルID: "602169027" IDをインポートするためにPythonを実行した後で画面に表示されるとき:602169027.0 – lazurens

+0

@lazurens CSVファイルですか?また、 'dfuid.head()'と 'print type(行['id'])'(ループの最後のもの)を実行できますか?それは私たちのアイデアを与える必要があります – patrick

+0

助けてくれてありがとう、とfortunetly私はいくつかの実験の後に解決策を得た – lazurens

0

私はいくつかの実験後の溶液を得た:

dfuids = pd.read_csv('Uids.csv') 
valid = [] 
notvalid = [] 
for index, row in dfuids.iterrows(): 
    print index 
    x = str(row.id) 
    #print x , type(x) 
    try: 
     tweet = api.user_timeline(row.id) 
     #print "Fine :",row.id 
     valid.append(x) 
     #print x, "added to valid" 
    except: 
     #print "NotOk :",row.id 
     notvalid.append(x) 
     #print x, "added to valid" 

コードのこの部分は、私が必要なものだったので、そのユーザーIDは、私たちにタイムラインからいくつかのつぶやきを与える場合には、IDSのために、すべてのループ、およびテスト正しい場合は、(有効な)リストに文字列として追加されます。それ以外の理由で例外が発生した場合は、それが(無効な)に追加されます。

私たちは、データフレームおよびエクスポートcsvファイルにこのリストを保存することができます

df = pd.DataFrame(valid) 
dfnotv = pd.DataFrame(notvalid) 
df.to_csv('valid.csv', index=False, encoding='utf-8') 
dfnotv.to_csv('notvalid.csv', index=False, encoding='utf-8') 
関連する問題