Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果selenium中的文本元素被主体标记分割,如何访问它_Python_Selenium - Fatal编程技术网

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

Python 如果selenium中的文本元素被主体标记分割,如何访问它,python,selenium,Python,Selenium,在web抓取数据的过程中,我在尝试访问网站上的一些值时遇到问题。问题是我要提取的文本在类中,该类包含由标记分隔的多个文本(这些body标记也包含对我来说也很重要的文本) 因此,首先,我尝试查找带有我需要的文本的标记(在本例中为“Category”),然后从body标记分配下面的文本中提取确切的类别。我可以使用精确的XPath,但这里不是这样,因为我需要在这个侧边栏中搜索的其他页面包含不同数量的行,所以位置以及XPath都是不同的 预期的输出是“实用工具”-侧边栏中的类别 我需要提取的网站和文本如

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

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

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

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

元素如下所示:

我试过的代码是:

driver=webdriver.Safari()
司机,上车https://www.statsforsharks.com/entry/MC_Squares')
element=driver。通过xpath(“b[contains(text(),'Category')]/以下同级”查找元素
对于元素中的值:
打印(value.text)
驱动程序关闭()
指向包含数据的页面的链接为


谢谢!

您最好在这里使用正则表达式,因为整个文本都在“公司边栏主体”类下,其中只有一些文本位于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将产生“类别:实用工具”,您可以使用它。如果类别(“实用工具”)的值在其他页面上不同,这也会起作用。

您最好在此处使用正则表达式,因为整个文本都属于“公司侧边栏主体”类,其中只有一些文本位于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将生成“类别:实用工具”,然后您可以使用它。如果类别的值('Utility')为与其他页面不同。

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


有什么特别的原因要刮我的网站吗?

当我的网站是MediaWiki网站时,有更简单的方法。例如,你可以使用JSON请求通过API访问页面数据,并使用更有限的DOM解析它


有什么特别的原因想删除我的网站吗?

@komatiraju032我已经尝试了XPath的所有功能:(没有行,因为它不是表,从视觉上看,类别和实用程序或其他参数的键值对及其值正好在一起。@komatiraju032我已经尝试了XPath的所有功能:(没有行,因为它不是表,从视觉上看,category和utility或其他参数的键值对及其值正好位于彼此下方。谢谢!但是我如何从本文中仅带来“utility”呢?此外,您的答案给出了输出“category:utilitySasking”。如何解决这个问题?我已经使用下面的测试了regex,我得到了答案。)Category:Utility'。我还测试了python代码,也得到了预期的结果。元素中的文本包含回车“\r\n”,因此正则表达式的\w+部分将只得到它可以到达某个点的单词-在这种情况下,“\r\n”可能是元素中的文本不包含回车符?尽管是的,文本不包含/r/n符号…那么我如何才能将此元素带到元素中,或者在没有它们的情况下访问所需的部分?通常这可能不是最好的方法,我会质疑是否有更好的方法来执行测试-例如,如果有API,则使用API。然而,在这些c语言中因此,您需要尝试并发挥想象力。因此,我知道“询问交易”有一个h4标记。因此,您可以将该文本保存在一个变量中,并在执行正则表达式搜索之前使用该文本拆分原始字符串。
header\u text=driver.find\u element\u by_css\u selector(“.company sidebar body>h4”).text
然后
text\u头之前=sidebertext.split(头\u文本,1)[0]
。现在在标题前对文本进行搜索谢谢!但是我如何才能从该文本中仅获取“实用程序”?此外,您的答案给出了输出“Category:utilitySasking”。如何解决这个问题?我已经使用下面的测试了正则表达式,得到了“Category:Utility”。我还测试了python代码,也得到了预期的结果。文本来自element包含回车符'\r\n',因此正则表达式的\w+部分将只得到它可以到达某一点的单词-在这种情况下,'\r\n'可能元素中的文本不包含回车符?但会感到惊讶,因为您像我一样刚从元素中得到文本。是的,文本不包含/r/n符号…那么如何我可以随身携带这个元素,或者不用它们就可以访问所需的部分吗?一般来说,这可能不是最好的方法,我会质疑是否有更好的方法来执行您的测试-例如,如果他们有API,就使用API。然而,在这些情况下