Это может выглядеть как повторяющийся вопрос, но поверьте мне, я заметил кое-что новое с твиттером.
Ранее я сделал скребок твиттера, который извлекает заданное количество твитов с помощью прокрутки и ожидания динамического c элементов. Но сейчас, похоже, это не работает. Он не очищает более 10 твитов. Кроме того, твиты, которые он очищает, - это только последние 10 твитов (из всех твитов, которые я загружаю изначально с помощью прокрутки)
Эта функция должна очищать как минимум n твитов. Вначале появляется около 10 твитов. Поэтому я прокручиваю страницу n/10-1
раз, чтобы загрузить все n твитов. Затем я очищаю все div с определенным именем класса.
def get_n_tweets(n, search_str='Covid 19'):
driver = webdriver.Firefox(executable_path='geckodriver.exe')
driver.get("http://twitter.com/search?q=" + search_str + "&src=typd")
response = []
for x in range(math.ceil(n / 10)-1):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
try:
WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div[class='css-1dbjc4n r-1iusvr4 r-16y2uox r-1777fci r-5f2r5o r-1mi0q7o']"))
)
e_tweets = driver.find_elements(By.CSS_SELECTOR, "div[class='css-1dbjc4n r-1iusvr4 r-16y2uox r-1777fci r-5f2r5o r-1mi0q7o']")
for e_tweet in e_tweets:
e_fullname = e_tweet.find_element(By.CSS_SELECTOR, "div>span[class='css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0']")
e_tweet_text = e_tweet.find_element(By.CSS_SELECTOR, "div[class='css-901oao r-hkyrab r-1qd0xha r-a023e6 r-16dba41 r-ad9z0x r-bcqeeo r-bnwqim r-qvutc0']")
response.append({'by': e_fullname.text,
'tweet': e_tweet_text.text,
'score': TextBlob(e_tweet_text.text).sentiment.polarity})
finally:
driver.quit()
return response
Что я пробовал? Я попытался загрузить столько твитов, сколько мне нужно, прокрутив страницу вниз, прокрутив назад до начала страницы, а затем получил необходимые элементы. Это вызывает ошибку StaleElementError.
Я подозреваю, что это и есть причина: на веб-странице, когда я прокручиваю вниз, чтобы загружалось определенное количество твитов, а затем возвращались в верхнюю часть страницы, твиты, которые Я ранее загрузил исчезновение.
Ищу простой и стандартный способ решения этой проблемы. Любая помощь будет принята с благодарностью!