Seite 1 von 1
Twitter Scraper - Problem
Verfasst: Mittwoch 10. Juli 2019, 18:17
von roarhide
Hey Leute,
ich würde gerne Twitter Daten analysieren, aber kann mit maxQDA immer nur eine Woche importieren. Da ich aber gerne ältere Tweets hätte, bin ich nun auf diese Methode gestoßen.
https://www.youtube.com/watch?v=Ou_floKQqd8
Ich komme aus einem ganz anderen Bereich und habe eigentlich gar keine Ahnung von Python, deswegen hoffe ich, dass ihr mir helfen könnt.
Eigentlich klappt alles, nur am Ende kommt diese Fehlermeldung (siehe Bild)
Habe raw_input zu input geändert. Sonst ist alles wie im Video, hier der Code
https://github.com/ritvikmath/ScrapingD ... Data.ipynb
Ich bedanke mich schon mal im Voraus
LG!

Re: Twitter Scraper - Problem
Verfasst: Mittwoch 10. Juli 2019, 19:41
von Bolitho
das beigefügte Bild ist nicht entzifferbar, wie wäre es mit copy und paste?
Re: Twitter Scraper - Problem
Verfasst: Mittwoch 10. Juli 2019, 22:03
von roarhide
Ahja... Sehe es auch gerade.
Hier nochmal das gesamt Ding
Code: Alles auswählen
"""
INPUTS:
consumer_key, consumer_secret, access_token, access_token_secret: codes
telling twitter that we are authorized to access this data
hashtag_phrase: the combination of hashtags to search for
OUTPUTS:
none, simply save the tweet info to a spreadsheet
"""
def search_for_hashtags(consumer_key, consumer_secret, access_token, access_token_secret, hashtag_phrase):
#create authentication for accessing Twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
#initialize Tweepy API
api = tweepy.API(auth)
#get the name of the spreadsheet we will write to
fname = '_'.join(re.findall(r"#(\w+)", hashtag_phrase))
#open the spreadsheet we will write to
with open('%s.csv' % (fname), 'wb') as file:
w = csv.writer(file)
#write header row to spreadsheet
w.writerow(['timestamp', 'tweet_text', 'username', 'all_hashtags', 'followers_count'])
#for each tweet matching our hashtags, write relevant info to the spreadsheet
for tweet in tweepy.Cursor(api.search, q=hashtag_phrase+' -filter:retweets', \
lang="de", tweet_mode='extended').items(100):
w.writerow([tweet.created_at, tweet.full_text.replace('\n',' ').encode('utf-8'), tweet.user.screen_name.encode('utf-8'), [e['text'] for e in tweet._json['entities']['hashtags']], tweet.user.followers_count])
Code: Alles auswählen
consumer_key = input('Consumer Key ')
consumer_secret = input('Consumer Secret ')
access_token = input('Access Token ')
access_token_secret = input('Access Token Secret ')
hashtag_phrase = input('Hashtag Phrase ')
if __name__ == '__main__':
search_for_hashtags(consumer_key, consumer_secret, access_token, access_token_secret, hashtag_phrase)
Dann gebe ich die entsprechenden APIs und hashtags ein
und dann kommt dieser Fehler
Code: Alles auswählen
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-97600f226d21> in <module>
7
8 if __name__ == '__main__':
----> 9 search_for_hashtags(consumer_key, consumer_secret, access_token, access_token_secret, hashtag_phrase)
NameError: name 'search_for_hashtags' is not defined
Re: Twitter Scraper - Problem
Verfasst: Mittwoch 10. Juli 2019, 22:11
von Sirius3
Du hast nicht alle Zellen Deines Notebooks in der Reihenfolge ausgeführt.
Re: Twitter Scraper - Problem
Verfasst: Donnerstag 11. Juli 2019, 05:51
von roarhide
Okay, wenn ich die oberen Zellen auch ausführe, dann erstellt er mir jetzt zwar die Datei, aber ohne Inhalt
Hat das damit was zu tun, dass ich Python 3.7 habe und im Video (und den Code) Python 2.x verwendet wurde ?
Code: Alles auswählen
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-97600f226d21> in <module>
7
8 if __name__ == '__main__':
----> 9 search_for_hashtags(consumer_key, consumer_secret, access_token, access_token_secret, hashtag_phrase)
<ipython-input-2-02652c2d50b3> in search_for_hashtags(consumer_key, consumer_secret, access_token, access_token_secret, hashtag_phrase)
25
26 #write header row to spreadsheet
---> 27 w.writerow(['timestamp', 'tweet_text', 'username', 'all_hashtags', 'followers_count'])
28
29 #for each tweet matching our hashtags, write relevant info to the spreadsheet
TypeError: a bytes-like object is required, not 'str'
Re: Twitter Scraper - Problem
Verfasst: Donnerstag 11. Juli 2019, 08:12
von Sirius3
Genau. Du öffnest Die Datei im Binärmodus ("wb"), weil das csv-Modul in Python2 noch Probleme mit Unicode hatte. Statt dessen solltest Du beim Öffnen als Textdatei Dein gewünschtes Encoding angeben und die explizite Codierung beim Schreiben entfernen.
Du solltest auch keine Liste im Argument für `writerow` übergeben, da da nur die Repräsentation der Liste als String geschrieben wird und die ist nicht für die Ausgabe und Weiterverarbeitung gedacht, sondern nur für Debug-Zwecke.
Re: Twitter Scraper - Problem
Verfasst: Donnerstag 11. Juli 2019, 08:56
von __blackjack__
@Sirius3: Der letzte Absatz stimmt aber nicht, oder ist es noch zu früh für mich? (Hatte noch keinen Kaffee

)
Re: Twitter Scraper - Problem
Verfasst: Donnerstag 11. Juli 2019, 09:05
von Sirius3
@__blackjack__: ich wußte nicht, was damit passiert und habe es ausprobiert. Was sollte denn sonst ausgegeben werden?
Re: Twitter Scraper - Problem
Verfasst: Donnerstag 11. Juli 2019, 10:12
von __blackjack__
@Sirius3: Okay, es lag am Kaffee. Ich habe nur auf den `writerow()`-Aufruf im Traceback geachtet und Deine Formulierung missverstanden. Eine Liste *in* der Liste die als Argument übergeben wird, ist natürlich keine gute Idee.
@roarhide: Das solltest Du explizit selbst irgendwie in eine Zeichenkettendarstellung bringen, die man später auch einfach weiterverarbeiten kann. Beispielsweise die Hashtags einfach nur durch Leerzeichen getrennt, oder als JSON kodiert.
Re: Twitter Scraper - Problem
Verfasst: Freitag 12. Juli 2019, 18:40
von roarhide
Danke für eure Hilfe,
habe es jetzt aber über diesen Weg lösen können!
https://www.youtube.com/watch?v=zF_Q2v_ ... 2418596072