twitter上的所有主题都可以在这个link中找到 我想刮与每个子类别内的所有
BeautifulSoup在这里似乎没有什么用处。我尝试使用selenium,但我不知道如何匹配单击主类别后出现的XPath
from selenium import webdriver
from selenium.common import exceptions
url = 'https://twitter.com/i/flow/topics_selector'
driver = webdriver.Chrome('absolute path to chromedriver')
driver.get(url)
driver.maximize_window()
main_topics = driver.find_elements_by_xpath('/html/body/div[1]/div/div/div[1]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div/div/div/div/span')
topics = {}
for main_topic in main_topics[2:]:
print(main_topic.text.strip())
topics[main_topic.text.strip()] = {}
我知道我可以使用main_topics[3].click()
单击主类别,但我不知道如何递归地单击它们,直到我只找到右边有Follow
的类别
刮除所有主要主题,例如艺术与艺术;文化,商业和;金融等使用Selenium和python您必须为
visibility_of_all_elements_located()
诱导WebDriverWait,并且您可以使用以下任一Locator Strategies:使用
XPATH
和文本属性:使用
XPATH
和get_attribute()
:控制台输出:
要使用Selenium和WebDriver刮取所有主和子主题,您可以使用以下定位策略:
使用
XPATH
和get_attribute("textContent")
:控制台输出:
注意:您必须添加以下导入:
看看XPATH是如何工作的。只需输入“//element[@attribute=“foo”]”,就不必写出整个路径。请小心,因为主主题和子主题(单击主主题后可见)具有相同的类名。这是导致错误的原因。下面是我如何单击子主题的,但我相信有更好的方法:
我使用以下方法找到主题元素:
然后我创建了一个名为:
然后,我循环浏览主题并将每个element.text显示到main_topics列表中,然后单击每个元素以显示主要主题
然后,我创建了一个名为sub_topics的新变量:(它现在是所有打开的主题)
然后,我又创建了两个空列表,名为:
然后,我for循环遍历sub_主题,并做了一个if语句,仅当元素不在主主题中时才将elements.text附加到subs_列表,并跳过这些单词列表。我这样做是为了过滤掉顶部的主要主题和不必要的文本,因为所有这些dern元素都具有相同的类名。最后,单击每个子主题。最后一部分令人困惑,因此下面是一个示例:
还有一些隐藏的子主题。查看是否可以单击其余的子主题。然后,查看是否可以找到followbutton元素并单击每个元素
相关问题 更多 >
编程相关推荐