python - scrapy 能够检查是否只有下一个兄弟姐妹有预期的标签?
问题描述
让我发布我想先抓取的部分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>
我正在尝试按image_url
顺序抓取图像的 p 和 src 中的文本。问题是,我上面显示的 html 实际上不是静态的,所有页面都有不同的结构,这意味着有时会有更多p
的标签,然后才有center
标签,其中包括img src
由于p
andcenter
标记在每个页面中是随机构造的,因此我正在考虑获取所有p
标记,例如使用response.css('#hello p')
然后循环所有标记p
以获取文本,但是在p
循环时从当前标记获取文本时,还要检查下一个兄弟是否有center
标记,如果这样做,则将其src
附加。
我发现了类似的事情p.xpath('following-sibling::center[1]/img/@src').get()
,因为 p 是迭代过程中的每个段落。
但我认为,这根本不起作用,因为假设我有 4 个p
标签,直到 acenter
我实际上会得到 4 个img src
,因为这p.xpath('following-sibling::center[1]/img/@src').get()
不仅会找到下一个兄弟姐妹,而且会遍历所有兄弟姐妹并查看center
标签是否匹配。
我尝试使用谷歌搜索,但我没有看到任何提及仅检查下一个兄弟姐妹是否是某个标签的内容。任何人都知道我可以让它工作,以便我可以按顺序保存数据吗?
希望我的解释是有道理的。
提前感谢您的任何帮助和建议
解决方案
尝试以下 XPath 以获得所需的输出
p.xpath('following-sibling::*[1][name()="center"]/img/@src')
推荐阅读
- javascript - 检测多个元素上的鼠标悬停事件(JS)
- python - try and if - 赋值前引用的局部变量
- c# - ASP.net Core - SwaggerResponseExample 不输出指定的示例
- r - 在 R 中创建布尔值的聚合
- selenium - Safari 不支持在多线程上执行自动化脚本,
- python - 如何正确使用 StringVar?
- docusignapi - 文档 | 开发者沙盒 | 签名者什么时候应该有一个docusign帐户?
- c++ - 无法使 include-.hpp-file 与其中 2 个一起工作
- apache-camel - Camel aries 蓝图中使用 cxfendpoint 的基本身份验证
- ios - 快速替换此文本比较