我正在尝试使用Python在Twitter上进行情感分析。这是我的代码
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个新窗口-一个带有seattlepacificuniversity标签的窗口,另一个带有名为“ data”的窗口,其中只有空格,错误为“ Chrome正在由自动化软件控制”。如何只检索推文以进行进一步的清理和分析步骤。
对不起,我对Python世界还很陌生
我已对下面的代码进行了一些更正。我不知道这最终是否会按照您的意图进行,但是它正在做的是进行大量的分页阅读,然后查找所有tweet并遍历它们,从每个tweet中打印文本。如果这不能完全产生所需的结果,但是您现在可以使用,则可能需要对代码进行更多的调整。
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()
为回答您关于收集所有tweet和打印文本的问题,我在下面做了一些代码更改。
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在每页向下时都加载了一组不同的tweet,因此我需要在每页向下之后收集这些tweet并将它们存储在列表中。在完成整个页面的循环之后,我删除了列表中所有重复的tweet,然后对其进行遍历以打印文本。*注意:我将for循环更改为仅执行16次,因为在执行此操作时,这是所需的最大页面下移次数。理想情况下,您需要执行while循环,然后找到一种方法来确定何时到达终点,然后退出循环。