2017-07-18 3 views
0

Ich habe einen Scraper mit Python erstellt, der alle Follower eines bestimmten Twitter-Benutzers bekommt. Das Problem ist, dass wenn ich diese Liste von Benutzer-IDs verwende, um ihre Tweets mit logstash zu erhalten, habe ich einen Fehler. Ich habe http://gettwitterid.com/ verwendet, um manuell zu überprüfen, ob diese IDs funktionieren, und sie sind, aber die Liste ist wirklich lang, um es eins nach dem anderen zu überprüfen.Validiere, wenn User ID auf Twitter Tweets scratzen kann

Gibt es eine Lösung mit Python, um die IDs in zwei Listen zu teilen, eine mit gültigen IDs und die andere enthält die nicht gültigen, verwende ich die gültige Liste als Eingabe für logstash? Die ersten 10 Zeilen der CSV-Datei ist wie folgt: "id" "602169027" "95104995" "874339739557670912" "2981270769" "93054327" "870723159011545088" "3008493180" "874804469082533888" "756339889092829184" "1077712806"

habe ich versucht, diesen Code Tweets erhalten Ids von cSV importiert verwenden, aber unfortunetly ist es Anheben 144 (nicht gefunden)

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

Ist das nicht ein 144 genau das, was man erwarten würde, wenn eine ID ungültig ist? Da Ihr Dokument ungültige IDs enthält? Warum nennst du 'get_status' von außerhalb deiner Schleife und von' dfuids' anstatt von 'row'? – patrick

+0

Das Problem ist, dass alle IDs 144 (nicht gefunden), diese IDs mit 144 ich manuell gefunden haben, gültig mit dieser Website in der Frage. Nicht alle IDs sind ungültig aber einige von ihnen, da die Liste lange nicht manuell gemacht werden kann! Ich bin auch Anfänger Python Benutzer, daher traue ich nicht meine Programmierkenntnisse! – lazurens

Antwort

0

Versuchen Sie Ihren Code, dies zu ändern:

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

mögliche Fehler zu entkommen, Sie try/exceptloop später hinzufügen können.

+0

Ich denke, das Problem ist, dass beim Lesen von IDs aus CSV es nicht im selben Format ist: Original ID: "602169027", Wenn auf dem Bildschirm nach dem Ausführen von Python zum Importieren der IDs gedruckt wurde: 602169027.0 – lazurens

+0

@lazurens können Sie einen Auszug aus Ihrem einfügen CSV-Datei? Können Sie auch 'dfuid.head()' und 'print type (row ['id'])' (das letzte in der Schleife) ausführen? Das sollte uns eine Idee geben – patrick

+0

Danke für die Hilfe, und glücklicherweise habe ich die Lösung nach einigen Experimenten bekommen – lazurens

0

bekam ich die Lösung nach einigen Experimenten:

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" 

Dieser Teil des Codes war, was ich brauchte, so dass es Schleifen für alle Ids, und testen, ob die Benutzer-ID uns von der Timeline ein paar Tweets geben Wenn es korrekt ist, wird es als String an eine Liste angehängt, die als (gültig) bezeichnet wird, andernfalls wird es an (notvalid) angehängt, wenn wir aus irgendeinem Grund eine Ausnahme haben.

Wir können diese Liste in einem Datenrahmen und Export csv speichern:

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') 
Verwandte Themen