Получение данных с использованием селена и добавление их в словарь для использования в кадре данных

1

Я пытался захватить твиты с твиттера, используя селен. Мне удалось получить html, который я хочу, и распечатать его, но у меня возникли проблемы с получением формы, подходящей для использования в dataframe.

Вот мой код:

import time
import pandas as pd
import numpy as np

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://twitter.com/search?f=tweets&q=cuomosmta%20since%3A2016-08-22%20until%3A2018-08-22'

browser.get(url)
time.sleep(1)

tweet_dict = {}

tweets = browser.find_elements_by_class_name('tweet-text')

for tweet in tweets:
    print(tweet.text)
    tweet_dict['tweet'] = tweet.text

Если вы запустите код, вы увидите, что он печатает каждый отдельный твит. Я сделал это, чтобы убедиться, что код работает.

Но по какой-то причине, когда я проверяю свой словарь, мой вывод:

tweet_dic['tweet']

является:

'Ugh, Cuomo and #CuomosMTA are terrible, just terrible.'

Вышеприведенный результат также является последним твитом на странице, на котором я печатаю.

Я пробовал этот метод несколькими способами и даже пытался BeautifulSoup, но по какой-то причине я продолжаю получать тот же результат.

Я не понимаю, почему я могу печатать все твиты, но не добавлять их в словарь.

Я новичок и, вероятно, пропущу что-то очень очевидное, поэтому любая помощь будет оценена.

Пожалуйста, если это возможно, я стараюсь использовать только селен, поскольку его легче использовать, чтобы получить точную метку времени, чем в beautifulsoup.

Спасибо!

Теги:
selenium
twitter

1 ответ

1
Лучший ответ

Словарь должен содержать только уникальные ключи, поэтому вместо добавления каждого твита в цикл вы просто переписываете одну и ту же пару ключ-значение. Вы можете попробовать следующее решение:

for tweet in range(len(tweets)):
    print(tweets[tweet].text)
    tweet_dict['tweet_%s' % tweet] = tweets[tweet].text

Выход должен быть таким же

{'tweet_0': 'first tweet content', 'tweet_1': 'second tweet content', ...}
  • 0
    Огромное спасибо. Мой единственный вопрос - что на самом деле означает ['tweet_% s'% твит]. Если бы вы могли провести меня через это, я был бы очень признателен.
  • 0
    Вот как (один из способов) работает конкатенация строк в Python: %s является строковым заполнителем в том смысле, что он будет заменен фактическим строковым значением. % tweet - это то, что именно вы передали вместо заполнителя. Вы также можете передать больше подстрок как "here comes %s and %s" % ("first", "second") , так что оно будет выполнено как "fere comes first and second"
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню