scrapy 能够检查是否只有下一个兄弟姐妹有预期的标签?

scrapy able to check if only next sibling has expected tag?

让我post部分html我要先刮

<div id="hello">
  <p>abc</p>
  <center><img src="image_url"></center>
  <p align="center" style="text-align: center;"><b>def</b></p>
  <center><img src="image_url"></center>
  <p align="center" style="text-align: center;"><b>def</b></p>
  <p>abc</p>
  <p align="center" style="text-align: center;"><b>def</b></p>
  <center><img src="image_url"></center>
  <p align="center" style="text-align: center;"><b>def</b></p>
  <p>abc</p>
  <center><img src="image_url"></center>
</div>

我正在尝试按顺序抓取图像的 p 和 src 中的文本,即 image_url。 问题是,我上面显示的 html 实际上不是静态的,所有页面都有不同的结构,这意味着有时在 center 标签之前会有更多 p 标签,其中包括 [=14] =]

由于 pcenter 标签在每个页面中都是随机构造的,我正在考虑获取所有 p 标签,例如使用 response.css('#hello p') 然后循环所有 p 获取文本,但在循环时从当前 p 标签获取文本时,还要检查下一个兄弟是否有 center 标签,如果有则获取 src附加它。

我通过 p.xpath('following-sibling::center[1]/img/@src').get() 找到了类似的东西,因为 p 是迭代过程中的每个段落。

但我想,这根本行不通,因为假设我有 4 个 p 标签直到 center 我实际上会得到 4 img src 因为 p.xpath('following-sibling::center[1]/img/@src').get() 不只是找到下一个兄弟姐妹,而是遍历之后的所有兄弟姐妹,看看 center 标签是否匹配。

我试过谷歌搜索,但我没有看到任何提到只检查下一个兄弟是否是某个标签的内容。 任何人都知道我可以让它工作以便我可以按顺序保存数据吗?

希望我的解释有道理。

在此先感谢您的帮助和建议

尝试以下 XPath 以获得所需的输出

p.xpath('following-sibling::*[1][name()="center"]/img/@src')