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

时间:2019-02-15 11:15:50

标签: selenium selenium-webdriver xpath webdriver xpath-1.0

以下是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

4 个答案:

答案 0 :(得分:1)

这里的xpath可用于获取作者:

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

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


您的xpath应该是这样的:

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

答案 1 :(得分:1)

尝试下面的代码。这应该可行。它将获取所有作者。

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

for element in elements:
    print(element.text)

请让我知道是否可行。

答案 2 :(得分:1)

您可以先获取列表中所有span元素的文本,然后从“ by”文本值中对其进行切片

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

答案 3 :(得分:0)

要打印所有作者的姓名,然后打印单词 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]")])