说我有这样的结构;
<div id="body">
<h1> Title </h1>
<p> Date Created </p>
<p class="text-bold"> Description </p>
<p> Para1 </p>
<p> Para2 </p>
<p> Para..</p>
<p> ParaN </p>
我试图将Para1加到ParaN上。要添加到其上,某些链接中的Para1可能会被设置为//p[5]
,有时会被设置为//p[6]
。
因此,运行默认值
def parse_details(self, response):
item = response.meta["item"]
item['Message'] = response.xpath('//p[x]/text()').extract()
yield item
它有时会失败并返回错误的字段,因为x
有点动态。保持不变的是我需要<p class="text-bold"> Description </p>
下的所有字段。
无论如何都要这样做?
答案 0 :(得分:2)
如果您需要<p class="text-bold"> Description </p>
之后的所有字段,只需尝试xpath following-sibling
函数
html = """
<div id="body">
<h1> Title </h1>
<p> Date Created </p>
<p class="text-bold"> Description </p>
<p> Para1 </p>
<p> Para2 </p>
<p> Para..</p>
<p> ParaN </p>
"""
from scrapy import Selector
sel = Selector(text=html)
xpath = "//p[contains(text(), 'Description')]/following-sibling::p/text()"
r = sel.xpath(xpath).extract()
print(r)
# [u' Para1 ', u' Para2 ', u' Para..', u' ParaN ']