Как получить данные из твиттера после запуска селена - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь провести сентиментальный анализ в Твиттере, используя Python. Вот мой код

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
base_url = u'htttps://twitter.com/search?q='
query = u'seattlepacificuniversity'
url = base_url + query
browser = webdriver.Chrome()
browser.get(url)
time.sleep(1)
body = browser.find_elements_by_tag_name('body')
for _ in range(100):
   body.send.keys(Keys.PAGE_DONW)
   time.sleep(0.2)
tweets = browse.find_elements_by_class_name('tweet-text')
for tweet in tweets:
    print(tweet.text)

Проблема заключается в том, что после запуска кода появилось 2 новых windows - один с хэштегом seattlepacificuniversity, а другой с именем "data", с пустым пространством и ошибкой " Chrome контролируется автоматизированным программным обеспечением ". Как я могу получить только текст твита для дальнейшей очистки и анализа шагов.

Извините, я так новичок в мире Python

1 Ответ

0 голосов
/ 05 марта 2020

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

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
base_url = u'https://twitter.com/search?q='
query = u'seattlepacificuniversity'
url = base_url + query
browser.get(url)
time.sleep(1)
body = browser.find_element_by_tag_name('body')
for _ in range(100):
   body.send_keys(Keys.PAGE_DOWN)
   time.sleep(0.2)

tweets = browser.find_elements_by_css_selector("[data-testid=\"tweet\"]")

for tweet in tweets:
    print(tweet.text)

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

browser = webdriver.Chrome()

В ответ на ваш вопрос о сборе всех твитов и печати текстов я внес некоторые изменения в код, приведенные ниже.

for _ in range(16):
    tweets.extend(browser.find_elements_by_css_selector("[data-testid=\"tweet\"]"))
    body.send_keys(Keys.PAGE_DOWN)
    time.sleep(1)

tweets = list(dict.fromkeys(tweets))  # removes duplicates

for tweet in tweets:
    print(tweet.text)

Поскольку DOM загруженный различным набором твитов с каждой страницей вниз, мне нужно было собирать твиты после каждой страницы вниз и сохранять их в списке. После завершения l oop прокрутки страниц я удалил все дубликаты твитов в списке, а затем прошел через них, чтобы напечатать текст. * Примечание: я изменил ваш для l oop только на go 16 раз, потому что на тот момент, когда я делал это, было максимальное количество страниц, которое было необходимо. В идеале у вас есть время, чтобы l oop сделал это, а затем нашел способ определить, когда вы достигли конца, а затем вырваться из l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...