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] =]
由于 p
和 center
标签在每个页面中都是随机构造的,我正在考虑获取所有 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')
让我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] =]
由于 p
和 center
标签在每个页面中都是随机构造的,我正在考虑获取所有 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')