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

标签 html xml web-scraping xpath scrapy

我有这样的构造

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

我需要使用 CSS 和 XPath 捕获链接 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]

将选择字符串值等于“Download”的每个a元素之前的第一个p同级元素。


p开始

这个 XPath,

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

将选择每个p元素后面的第一个a同级元素,其字符串值等于“文件名”


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

关于html - XPath:如何捕获前一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70854496/

相关文章:

excel - 使用 VBA 和 IE 解析 Internet HTML 页面的数据

python - 无法将创建不同子文件夹的不同文本文件放入主文件夹中

html - 如何用css从下到上垂直书写

jquery - 如何 "turn off"jQuery Mobile 的 <select> 下拉样式?

android - 如何防止 BottomAppBar 内容重叠

android - <Include> 一个带有 fab 按钮的 xml 文件

node.js - AWS EC - 如何永久运行 phantomjs 服务器

jquery - 对来自不同 DIV 的元素进行排序

javascript - 输入类型日期错误的设置值

c# - 根级别的数据无效。第 1 行,位置 1 MonoTouch