选择和修改的XPath节点
问题描述:
我使用此代码来获取所有的名字:
def parse_authors(self, root):
author_nodes = root.xpath('//a[@class="booklink"][contains(@href,"/author/")]/text()')
if author_nodes:
return [unicode(author) for author in author_nodes]
但我想,如果有任何翻译添加“(译)”旁边的名称:
example:translator1(translation)
答
您可以使用translation:
文本节点从译者区分作者 - 作者是“翻译:”文本节点的前面兄弟姐妹,翻译者 - 跟随兄弟姐妹。
著者:
//text()[contains(., 'translation:')]/preceding-sibling::a[@class='booklink' and contains(@href, '/author/')]/text()
翻译:
//text()[contains(., 'translation:')]/following-sibling::a[@class='booklink' and contains(@href, '/author/')]/text()
工作示例代码:
from lxml.html import fromstring
data = """
<td>
<a class="booklink" href="/author/43710/Author 1">Author 1</a>
,
<a class="booklink" href="/author/46907/Author 2">Author 2</a>
<br>
translation:
<a class="booklink" href="/author/47669/translator 1">Translator 1</a>
,
<a class="booklink" href="/author/9382/translator 2">Translator 2</a>
</td>"""
root = fromstring(data)
authors = root.xpath("//text()[contains(., 'translation:')]/preceding-sibling::a[@class='booklink' and contains(@href, '/author/')]/text()")
translators = root.xpath("//text()[contains(., 'translation:')]/following-sibling::a[@class='booklink' and contains(@href, '/author/')]/text()")
print(authors)
print(translators)
打印: