如何使用 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&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
。
您可以使用此处的 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]")])
下面是 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
。
您可以使用此处的 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]")])