2017-11-12 1 views
0

Problem: Mein Selen Scrapping Skript wird mir keine Tweet IDs, wahrscheinlich wegen eines Problems mit, wie ich sie anfordern.Tweet ids mit Selen?

Details:

Hallo an alle, habe ich ein Skript hier (https://github.com/bpb27/twitter_scraping/blob/master/scrape.py), die in eine Twitter-Suche geht und bekommt die IDs der alten Tweets.

Von diesem Skript, das ich zwei Teile geändert haben:

user = 'realdonaldtrump' 
start = datetime.datetime(2010, 1, 1) # year, month, day 
end = datetime.datetime(2016, 12, 7) # year, month, day 

geworden

user = 'metoo' 
start = datetime.datetime(2017, 10, 24) # year, month, day 
end = datetime.datetime(2017, 10, 25) # year, month, day 

und

def form_url(since, until): 
    p1 = 'https://twitter.com/search?f=tweets&vertical=default&q=from%3A' 
    p2 = user + '%20since%3A' + since + '%20until%3A' + until + 'include%3Aretweets&src=typd' 
    return p1 + p2 

hat

werden
def form_url(since, until): 
    p1 = 'https://twitter.com/search?l=fr&q=%23' 
    p2 = user + '%20since%3A' + since + '%20until%3A' + until + 'include%3Aretweets&src=typd' 
    return p1 + p2 

Nach meinen Änderungen geht das Skript korrekt zur Suche und iteriert über alle Tweets, aber keine IDs. Hier

ist die Anforderung Teil:

for tweet in found_tweets: 
    try: 
     id = tweet.find_element_by_name(id_selector).get_attribute('href').split('/')[-1] 
     ids.append(id) 
    except StaleElementReferenceException as e: 
     print('lost element reference', tweet) 

Irgendwelche Ideen, wie man das Problem lösen?

Antwort

0

Es kann auf Updates in HTML bezogen werden. Ihr Code tweet.find_element_by_name (id_selector) sollte

<a href="/xxx/status/928601524380536xxx" class="tweet-timestamp js-permalink js-nav js-tooltip" title="04:33 - 9 nov. 2017" data-conversation-id="928601524380536xxx"><span class="_timestamp js-short-timestamp " data-aria-label-part="last" data-time="xxx" data-time-ms="xxx" data-long-form="true">9 nov.</span></a> 

zurück, wie Sie es sehen können kein Attribut href ist. Anstatt "href" zu erhalten, sollten Sie das Attribut "Datenkonversations-ID" für jeden Tweet erhalten.

id = tweet.find_element_by_name(id_selector)['data-conversation-id'] 

Auf der anderen Seite, würde ich es vorziehen, diese id_selector nicht verwenden ('.Time a.tweet-Zeitstempel '), weil tweet [' Daten-item-id'] der ID geben soll.

<li class="js-stream-item stream-item stream-item" data-item-id="928601524380536xxx" id="stream-item-tweet-928601524380536xxx" data-item-type="tweet"> 

Bests,

+0

Sie haben recht, Verschrottung ist meine Schwachstelle, eine harte Zeit, meinen Kopf um ihn herum hat. Danke vielmals! :) – blacksatius