2014-04-16 8 views
5

Trending Ich habe ein folgendes Problem:Extrahieren Hashtags aus Twitter Themen Daten mit Python Tweepy

das Twitter-API und tweepy Modul verwenden, mag ich die Trending Topics überwachen und Hashtags aus den Daten zu extrahieren.

Dieser Code:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import tweepy, json 

CONSUMER_KEY = 'key' 
CONSUMER_SECRET = 'secret' 
ACCESS_KEY = 'key' 
ACCESS_SECRET = 'secret' 
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) 
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET) 
api = tweepy.API(auth) 

trends1 = api.trends_place(1) 
print trends1 

gibt mir Daten zu den global Trendthemen, die wie folgt strukturiert:

[{u'created_at': u'2014-04-16T12:13:15Z', u'trends': [{u'url': u'http://twitter.com/search?q=%22South+Korea%22', u'query': u'%22South+Korea%22', u'name': u'South Korea', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%23FETUSONEDIRECTIONDAY', u'query': u'%23FETUSONEDIRECTIONDAY', u'name': u'#FETUSONEDIRECTIONDAY', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%23PrayForSouthKorea', u'query': u'%23PrayForSouthKorea', u'name': u'#PrayForSouthKorea', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%23GaraGaraRP', u'query': u'%23GaraGaraRP', u'name': u'#GaraGaraRP', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%23%D8%A5%D8%B3%D9%85_%D8%A3%D9%85%D9%8A_%D8%A8%D8%AC%D9%88%D8%A7%D9%84%D9%8A', u'query': u'%23%D8%A5%D8%B3%D9%85_%D8%A3%D9%85%D9%8A_%D8%A8%D8%AC%D9%88%D8%A7%D9%84%D9%8A', u'name': u'#\u0625\u0633\u0645_\u0623\u0645\u064a_\u0628\u062c\u0648\u0627\u0644\u064a', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%23Kad%C4%B1nlarKamyon%C5%9Eof%C3%B6r%C3%BCOlursa', u'query': u'%23Kad%C4%B1nlarKamyon%C5%9Eof%C3%B6r%C3%BCOlursa', u'name': u'#Kad\u0131nlarKamyon\u015eof\xf6r\xfcOlursa', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%22Dear+My+BestFriend%22', u'query': u'%22Dear+My+BestFriend%22', u'name': u'Dear My BestFriend', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%22%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D0%B1%D0%BE%D1%80%D0%BE%D0%BD%D0%B0+100%22', u'query': u'%22%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D0%B1%D0%BE%D1%80%D0%BE%D0%BD%D0%B0+100%22', u'name': u'\u0421\u0430\u043c\u043e\u043e\u0431\u043e\u0440\u043e\u043d\u0430 100', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=%22If+I+Stay%22', u'query': u'%22If+I+Stay%22', u'name': u'If I Stay', u'promoted_content': None}, {u'url': u'http://twitter.com/search?q=Gabashvili', u'query': u'Gabashvili', u'name': u'Gabashvili', u'promoted_content': None}], u'as_of': u'2014-04-16T12:20:29Z', u'locations': [{u'woeid': 1, u'name': u'Worldwide'}]}] 

Ist dies eine Python-Liste, mehrere Wörterbücher enthält? Wie kann ich Hashtags aus diesen Daten extrahieren und in neue Variablen speichern?

Ich bin neu bei Python, also bitte erläutern Sie Ihre Auswahl.

Danke!

+0

Sie genug rep jetzt upvote;) – EdChum

+0

Hab es getan, danke! :) –

Antwort

2

In Ihrem Beispiel haben Sie einen einzigen Eintrag in Ihrer Liste, bestehend aus verschachtelten Diktaten mit Schlüsselwert 'Trends' jeder Wert ist ein anderes Diktat, an dem Sie interessiert sind 'Name' und insbesondere wenn es mit beginnt '#':

In [180]: 

[x for x in temp[0]['trends'] if x['name'].find('#') ==0] 
Out[180]: 
[{'name': '#FETUSONEDIRECTIONDAY', 
    'promoted_content': None, 
    'query': '%23FETUSONEDIRECTIONDAY', 
    'url': 'http://twitter.com/search?q=%23FETUSONEDIRECTIONDAY'}, 
{'name': '#PrayForSouthKorea', 
    'promoted_content': None, 
    'query': '%23PrayForSouthKorea', 
    'url': 'http://twitter.com/search?q=%23PrayForSouthKorea'}, 
{'name': '#GaraGaraRP', 
    'promoted_content': None, 
    'query': '%23GaraGaraRP', 
    'url': 'http://twitter.com/search?q=%23GaraGaraRP'}, 
{'name': '#إسم_أمي_بجوالي', 
    'promoted_content': None, 
    'query': '%23%D8%A5%D8%B3%D9%85_%D8%A3%D9%85%D9%8A_%D8%A8%D8%AC%D9%88%D8%A7%D9%84%D9%8A', 
    'url': 'http://twitter.com/search?q=%23%D8%A5%D8%B3%D9%85_%D8%A3%D9%85%D9%8A_%D8%A8%D8%AC%D9%88%D8%A7%D9%84%D9%8A'}, 
{'name': '#KadınlarKamyonŞoförüOlursa', 
    'promoted_content': None, 
    'query': '%23Kad%C4%B1nlarKamyon%C5%9Eof%C3%B6r%C3%BCOlursa', 
    'url': 'http://twitter.com/search?q=%23Kad%C4%B1nlarKamyon%C5%9Eof%C3%B6r%C3%BCOlursa'}] 

EDIT Um nur die hastags:

In [181]: 

[x['name'] for x in temp[0]['trends'] if x['name'].find('#') ==0] 
Out[181]: 
['#FETUSONEDIRECTIONDAY', 
'#PrayForSouthKorea', 
'#GaraGaraRP', 
'#إسم_أمي_بجوالي', 
'#KadınlarKamyonŞoförüOlursa'] 

können Sie verwenden startswith statt find:

+0

Danke! War wirklich mit der Struktur dieser Daten verloren ... Können Sie eine Methode empfehlen, wie man 'Name' daraus extrahiert? Einige Namen enthalten auch # nicht, aber ich bin nur an denen interessiert, die das tun. –

+0

Meine Antwort extrahiert nur die Namen, die ein '#' am Anfang haben – EdChum

+0

Ja, es funktioniert, wie Sie geschrieben haben, aber es gibt Ihnen auch eine Menge anderer Sachen (wie 'promited_content', 'query' usw.). Ich würde nur brauchen die Ausgabe zu etwas wie: #FETUSONEDIRECTIONDAY #PrayForSouthKorea etc –

3

Ihre Daten sind eine Liste mit einem Wörterbuch. Einer der Schlüssel in diesem Wörterbuch heißt Trends. Der Wert für diesen Schlüssel ist eine Liste von Wörterbüchern. Jedes dieser Wörterbücher enthält einen Schlüssel namens name, der eine Zeichenfolge mit einem Hashtag enthält. Hier ist ein Beispiel Ihre Daten zuzugreifen:

hashtags = [trend['name'] for trend in data[0]['trends'] if trend['name'].startswith('#')] 

Die ersten drei Zeilen der Ausgabe:

hashtags = [] 
trends = data[0]['trends'] 
for trend in trends: 
    name = trend['name'] 
    if name.startswith('#'): 
     hashtags.append(name) 

Dies kann zu verdichtenden

>>> for hashtag in hashtags: 
     print(hashtag) 
#FETUSONEDIRECTIONDAY 
#PrayForSouthKorea 
#GaraGaraRP 
+0

Beide sehen wirklich gut aus, weil sie 'Name' filtern und nur Hashtags extrahieren !, aber ich bekomme immer 'KeyError: 0', irgendeine Idee, was ich falsch mache? –

+0

@loop_digga bedeutet, dass Ihre Daten tatsächlich ein Wörterbuch und keine Liste sind, wie Sie gezeigt haben. Probiere meine Antwort noch einmal. –

+0

Das ist seltsam, ich kopiere einfach eingefügt die Datenausgabe von Ipython Notebook.Nun ist der Fehler: 'TypeError: nicht hashbarer Typ:' list ''. –

Verwandte Themen