XPath:如何捕获前一个元素?

XPath: How do I capture the previous element?

我有这样的构造

<p>File name</p>
<a href="https://somelink.pdf">Download</a>

我需要使用 CSS 和 XPath 捕获 link a 及其名称 p。我正在尝试执行以下操作,首先我使用 CSS 选择器找到所有 href 值以 .pdf (a[href$=".pdf"]):

结尾的文件
for i in response.css('a[href$=".pdf"]'):
    link = i.css('::attr("href")').get()
    name = i.xpath(?????????)
    print(name, link)

如何使用 XPath 捕获 p 元素中的文本?

a开始

这个 XPath,

//a[.="Download"]/preceding-sibling::p[1]

将 select 第一个 p 元素兄弟姐妹在每个 a 元素之前,其字符串值等于 "Download".


p开始

这个 XPath,

//p[.="File name"]/following-sibling::a[1]

将 select 第一个 a 元素兄弟跟随每个 p 元素,其字符串值等于 "File name".


无论哪种情况,您都可以通过将 /text() 附加到 XPath 来 select 文本节点子节点。