以下是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&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&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
。
答案 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]")])