从表中刮空字段

时间:2014-01-24 12:10:37

标签: scrapy

我正在尝试构建一个解析器,它将从包含药物信息的表中获取数据,例如药物名称,形式和价格。问题是那里缺少一些值,所以当我抓取数据顺序时会中断。请看下面以更好地了解问题。

表格形式:

+---------+----------+-------+
|   name  |   form   | price |
+---------+----------+-------+
| aspirin | 3 pills  |   1   |
| aspirin | 5 pills  |       |
| aspirin | 10 pills |   3   |
+---------+----------+-------+

每个价格字段都是一个html链接,因此该表的html如下所示:

<table>
<tr>
<td>name</td>
<td>form</td>
<td>price</td>
</tr>
<tr>
<td>aspirin</td>
<td>3 pills</td>
<td><a href="http://x.html">1</a></td>
</tr>
<tr>
<td>aspirin</td>
<td>5 pills</td>
<td></td>
</tr>
<tr>
<td>aspirin</td>
<td>10 pills</td>
<td><a href="http://x.html">3</a></td>
</tr>
</table>

从此表中提取价格字段的最佳方法是什么,包括空字段,以获取此表单中的退货商品: ['1','','3']。

当使用xpath“// table / tr / td [3] / a / text()”时,空字段被省略,我得到:['1','3']。

我正在考虑使用这个xpath抓取数据:“// table / tr / td [3] /”然后在管道中对其进行转换。但是,我希望有一些更简单的解决方案,因为我从原始网站抓取的数据有点复杂,因此我得到了这个:

[u'<td>\r\n\t\t\t\t</td>',
 u'<td>\r\n\t\t      \r\n      \t\t\t\t\t<a class="tooltip-lek" href="#" rel="#tooltip169815" title="Odp\u0142atno\u015b\u0107 po refundacji">3.20</a>\xa0\xa0\xa0\r\n\t\t\t<div style="display:none;" id="tooltip169815">\r\n\t\t\t\t<table>\r\n\t\t\t\t<tbody>\r\n\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t<td style="padding-right:5px;">lek wydawany za odp\u0142atno\u015bci\u0105 rycza\u0142tow\u0105 (3,20 z\u0142) do wysoko\u015bci limitu:</td>\r\n\t\t\t\t<td>we wskazaniach:                 choroba afektywna dwubiegunowa, schizofrenia</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\r\n\t\t\t\t</tbody>\r\n\t\t\t\t</table>\r\n\t\t\t</div>\r\n\t\t\t\t\t\t\t</td>',
 u'<td>\r\n\t\t\t\t</td>']

1 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
[u''.join(third_cell.xpath('./a/text()|./text()').extract()).strip()
 for third_cell in selector.xpath('//table/tr[position()>1]/td[3]')]

即。循环每个表行的每个第3个单元格(从第2行开始),并将所有文本元素连接成单个字符串。

你应该得到[u'1', u'', u'3']