如果selenium中的文本元素被主体标记分割,如何访问它

2024-06-01 08:41:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在web抓取数据的过程中,我在尝试访问网站上的一些值时遇到问题。问题是我要提取的文本在类中,该类包含由标记分隔的多个文本(这些body标记也包含对我来说也很重要的文本)

因此,首先,我尝试查找带有我需要的文本的标记(在本例中为“Category”),然后从body标记分配下面的文本中提取确切的类别。我可以使用精确的XPath,但这里不是这样,因为我需要在这个侧边栏中搜索的其他页面包含不同数量的行,所以位置以及XPath都是不同的

预期的输出是“实用工具”-侧边栏中的类别

我需要提取的网站和文本如下所示(请查看包含“类别”的侧栏:

enter image description here

元素如下所示:

enter image description here

我试过的代码是:

driver = webdriver.Safari()
driver.get('https://www.statsforsharks.com/entry/MC_Squares')
element = driver.find_elements_by_xpath("//b[contains(text(), 'Category')]/following-sibling")
for value in element:
    print(value.text)
driver.close()

指向包含数据的页面的链接是https://www.statsforsharks.com/entry/MC_Squares

谢谢大家!


Tags: 数据https标记文本com网站wwwdriver
2条回答

如果是MediaWiki网站,有更简单的方法。例如,您可以通过带有JSON请求的API访问页面数据,并使用更有限的DOM对其进行解析

你有什么特别的原因想刮我的网站吗

您最好在这里使用regex,因为整个文本都属于“company sidebar body”类,其中只有一些文本位于b标记之间,而有些则不在b标记之间

因此,您可以首先查看该类的文本:

sidebartext = driver.find_element_by_class_name("company-sidebar-body").text

这将为您提供以下信息:

“EOY项目销售额:$1000000\r\n上一年销售额:$200000\r\n类别:公用事业\r\n拍卖交易\r\n金额:10%\r\n金额:$300000\r\n价值:$3000000\r\n股票交易\r\n市场:凯文·奥莱里\r\n股票:25%\r\n金额:$300000\r\n价值:$1200000\r\n地点:-$1800000”

然后,您可以使用正则表达式来定位类别:

import re

c = re.search("Category:\s\w+", sidebartext).group()

print(c)

c将生成“类别:实用工具”,然后您可以使用它。如果类别(“实用工具”)的值在其他页面上不同,这也会起作用

相关问题 更多 >