Я пытался захватить твиты с твиттера, используя селен. Мне удалось получить 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.
Спасибо!
Словарь должен содержать только уникальные ключи, поэтому вместо добавления каждого твита в цикл вы просто переписываете одну и ту же пару ключ-значение. Вы можете попробовать следующее решение:
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', ...}
%s
является строковым заполнителем в том смысле, что он будет заменен фактическим строковым значением.% tweet
- это то, что именно вы передали вместо заполнителя. Вы также можете передать больше подстрок как"here comes %s and %s" % ("first", "second")
, так что оно будет выполнено как"fere comes first and second"