首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从twitter页面资源管理器中提取标签?

如何从twitter页面资源管理器中提取标签?
EN

Stack Overflow用户
提问于 2019-08-17 20:05:28
回答 3查看 474关注 0票数 1

我想在python3上使用selenium从twitter页面中提取标签名称(Hashtag)。但是没有特殊的标签或类,甚至没有ids能够定位和保存它们。

有没有一种方法,即使它们改变了,我也可以提取它们,而不必每次都编辑我的代码?

我认为下面的代码将把我带到使用链接文本的explore页面。但我不能使用相同的方法来定位标签,因为它们会时不时地变化。

代码语言:javascript
运行
复制
explore = driver.find_element_by_link_text("Explore")

我希望能够找到标签并将它们保存到列表中,这样我就可以在以后的工作中使用该列表。

这是其中一个标签的html代码:

代码语言:javascript
运行
复制
<span class="r-18u37iz"><span dir="ltr" class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0">#ARSBUR</span></span>

这些类不是唯一的,它们在页面的其他元素中使用,所以我不能使用它们。

如果有一种方法可以定位(#)标记,那么我只能获得包含它们的文本。

EN

回答 3

Stack Overflow用户

发布于 2019-08-18 05:35:21

要从twitter页面中提取标签,即在Python3上使用Seleniumhttps://twitter.com/explorer?lang=en,您必须为visibility_of_all_elements_located()引入WebDriverWait,您可以使用以下Locator Strategies之一

使用CSS_SELECTOR

driver.get("https://twitter.com/explorer?lang=en") print([my_elem.get_attribute("innerHTML") ) for my_elem in WebDriverWait(driver,5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"ahref^='/hashtag'>span.trend-name")))])

  • Using XPATH

hashtag(“https://twitter.com/explorer?lang=en") print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver,'trend-name')")))])

  • Note”//astarts with(@href,'/hashtag')/spancontains(@class,hashtag:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

  • Console输出:

'#MCITOT','#WorldSupportsKashmir','#MCIvsTOT',‘#11 11YearsOFViratism’,'#ManCity'

票数 1
EN

Stack Overflow用户

发布于 2019-08-17 21:09:01

你可以将页面源码转储到漂亮汤4.7.1 +中,并在使用类的同时使用:contains。您的类看起来与我看到的不同,但我对url做了一个假设。

注意:在页面上,可以在不同的类下有其他#,这将使选择器".trend-name, .twitter-hashtag"

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

d = webdriver.Chrome(r'path\chromedriver.exe')
d.get('https://twitter.com/explorer?lang=en')
WebDriverWait(d,5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".trend-name")))
soup = bs(d.page_source, 'lxml') 
hashtag_trends = [i.text for i in soup.select('.trend-name:contains("#")')]
print(hashtag_trends)

或者测试.text是否仅以#开头表示selenium

代码语言:javascript
运行
复制
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

d = webdriver.Chrome(r'path\chromedriver.exe')
d.get('https://twitter.com/explorer?lang=en')
hashtag_trends = [i.text for i in 
    WebDriverWait(d,5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".trend-name")))
    if i.text.startswith('#')
]

票数 0
EN

Stack Overflow用户

发布于 2019-08-18 08:42:19

对于定位器趋势主题,您可以使用xpath

代码语言:javascript
运行
复制
driver.find_element(By.XPATH, '(//*[contains(@class,"trend-name")])[1]').text
driver.find_element(By.XPATH, '(//*[contains(@class,"trend-name")])[1]').click()

您可以通过以下方式获取元素的计数:

代码语言:javascript
运行
复制
len_locator = driver.find_elements(By.XPATH, '//*[contains(@class,"trend-name")]')
print len(len_locator)

或者,如果只希望定位器仅以#开头,则可以使用:

代码语言:javascript
运行
复制
driver.find_element(By.XPATH, '(//*[@dir="ltr" and starts-with(text(), "#")])[1]').text
driver.find_element(By.XPATH, '(//*[@dir="ltr" and starts-with(text(), "#")])[1]').click

您可以通过以下方式获取元素的计数:

代码语言:javascript
运行
复制
len_locator = driver.find_elements(By.XPATH, '//*[@dir="ltr" and starts-with(text(), "#")]')
print len(len_locator)

它是热门话题的第一个定位器,如果你想要第二个定位器,那么将[1]替换为[2]等。使用迭代来获取全部。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57536127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档