我不知道如何使我的逻辑适用于我的情况。
我想从事先不知道列数的表中提取行。 来源:
<article class="col-md-10 col-md-push-1">
<b>Quantités recommandées (g/jour) :</b><br>
<br>
<table border="1" width="80%">
<colgroup>
<col width="2*">
<col width="1*">
<col width="1*">
<col width="1*">
</colgroup>
<tbody>
<tr>
<td align="center"><small><b>Poids du chat</b></small></td>
<td align="center"><small><b>Maigre</b></small></td>
</tr>
<tr>
<td align="center"><small>2 kg</small></td>
<td align="center"><small>39 g</small></td>
</tr>
<tr>
<td align="center"><small>3 kg</small></td>
<td align="center"><small>52 g</small></td>
</tr>
<tr>
<td align="center"><small>4 kg</small></td>
<td align="center"><small>63 g</small></td>
</tr>
<tr>
<td align="center"><small>5 kg</small></td>
<td align="center"><small>74 g</small></td>
</tr>
<tr>
<td align="center"><small>6 kg</small></td>
<td align="center"><small>84 g</small></td>
</tr>
<tr>
<td align="center"><small>7 kg</small></td>
<td align="center"><small>94 g</small></td>
</tr>
<tr>
<td align="center"><small>8 kg</small></td>
<td align="center"><small>103 g</small></td>
</tr>
<tr>
<td align="center"><small>9 kg</small></td>
<td align="center"><small>112 g</small></td>
</tr>
<tr>
<td align="center"><small>10 kg</small></td>
<td align="center"><small>121 g</small></td>
</tr>
</tbody>
</table>
</article>
要提取,我对此进行了硬编码:
feeding_box_table=response.xpath('//*[@id="feedingrecommendation-panel"]/div/article/table')
feeding_recommendation=[]
if feeding_box_table!=[]:
for tr in feeding_box_table.xpath("tr"):
tds=tr.xpath('td/small/b/text()|td/small/text()').extract()
feeding_recommendation.append(tds)
但是,当我想使用项目加载器实现这种硬编码的解决方案时,它会变得棘手,因为我可以在feeding_box_table.xpath("tr")
中进行迭代,因为out_processor中收集的值是str
而不是对象,其中{ {1}}已收集。
我不知道处理器是否应该以这种方式实际使用。这就是为什么我尝试使用xpat做所有事情的原因:xpath
输出结果并不令人满意:
输出:table=response.xpath('//*[@id="feedingrecommendation-panel"]/div/article/table/td/small/text()') but the output is not structured.
这就是我要遍历["Poids du chat","Maigre","2 kg","39 g",...."10 kg", "121 g"]
所需的输出:<tr></tr>
任何帮助表示赞赏。 问候
答案 0 :(得分:0)
我尝试过:
feeding_recommendation=[]
for tr in response.xpath('//*[@id="feedingrecommendation-panel"]/div/article/table/tr|//*[@id="feedingrecommendation-panel"]/div/article/table/tbody/tr'):
tds=tr.xpath('td/small/b/text()|td/small/text()').extract()
feeding_recommendation.append(tds)
l.add_value('feeding_recommendations_table',feeding_recommendation)
它确实起作用。但是我真的不确定我是否在这里充分利用ItemLoader。