如何使用 XPath 表达式提取作者姓名

How to extract the name of the authors using an XPath expression

下面是 HTML 的片段:

<div class="a-row a-spacing-none">
    <span class="a-size-small a-color-secondary">by 
    </span>
    <span class="a-size-small a-color-secondary">
        <a class="a-link-normal a-text-normal" href="/Lowell-Fryman/e/B01M3MNJTE/ref=sr_ntt_srch_lnk_1?qid=1550228622&amp;sr=1-1">
        Lowell Fryman
        </a> 
        and 
    </span>
    <span class="a-size-small a-color-secondary">
        <a class="a-link-normal a-text-normal" href="/Gregory-Lampshire/e/B01N7ZWT5Y/ref=sr_ntt_srch_lnk_1?qid=1550228622&amp;sr=1-1">
        Gregory Lampshire
        </a>
    </span>
</div>

我正在尝试获取所有作者的姓名。 这是单词 by 之后的任何测试。 我想出了以下 XPath,但它似乎并没有获取所有作者。

我的 XPath 表达式:

//div//span[text()=\"by \"]//following::span[1]//a

有人可以告诉我如何获取所有作者的姓名,同时设法跳过任何文本为 "and" 的元素吗?

如果有帮助,我正在使用 Selenium 的 find_element_by_xpath

您可以使用此处的 xpath 获取作者:

//div[./span[normalize-space(.='by')]]//a

//div[./span[contains(.,'by')]]//a


你的 xpath 应该是这样的:

//span[normalize-space(.='by')]/following-sibling::span//a

尝试以下 code.This 应该 work.It 将获取所有作者。

elements=driver.find_elements_by_xpath("//a[@class='a-link-normal a-text-normal']")

for element in elements:
    print(element.text)

如果这有效,请告诉我。

你可以先获取列表中所有跨度元素的文本,然后从"by"文本值

中切片
elements = [_.text() for _ in driver.find_elements_by_css_selector('div.span')]
print elements[elements.index('by'):] 

要打印所有作者的姓名后跟单词 by,您可以使用以下任一解决方案:

  • 使用innerHTML:

    print([author.get_attribute("innerHTML") for author in driver.find_elements_by_xpath("//span[contains(., 'by')]//following::span/a[@class='a-link-normal a-text-normal'][@href]")])
    
  • 使用text:

    print([author.text for author in driver.find_elements_by_xpath("//span[contains(., 'by')]//following::span/a[@class='a-link-normal a-text-normal'][@href]")])