Scrapy 从表中删除空字段

Scrapy 从表中删除空字段,scrapy,Scrapy,我正在尝试构建一个解析器,它将从包含药物信息的表中提取数据,如药物名称、形式和价格。问题是这里缺少一些值,所以当我刮取数据时,顺序会被打乱。请看下面的内容,以便更好地理解问题 表格格式: +---------+----------+-------+ | name | form | price | +---------+----------+-------+ | aspirin | 3 pills | 1 | | aspirin | 5 pills | | |

我正在尝试构建一个解析器,它将从包含药物信息的表中提取数据,如药物名称、形式和价格。问题是这里缺少一些值,所以当我刮取数据时,顺序会被打乱。请看下面的内容,以便更好地理解问题

表格格式:

+---------+----------+-------+
|   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>

名称
形式
价格
阿司匹林
3粒
阿司匹林
5粒
阿司匹林
10粒
从该表中提取价格字段(包括空字段)的最佳方法是什么,以获取此表单中的退货项目: ['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>']
[u'\r\n\t\t\t\t',
u'\r\n\t\t\r\n\t\t\t\t\t\xa0\xa0\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t莱克威达瓦尼扎odp\u0142atno\u015bci\u0105 rycza\u0142tow\u0105(3,20 z\u0142)do wysoko\u015bci limitu:\r\n\t\t\t\twwe wskazaniach:choroba afektywna dwubiegunowa,schizofrenia\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t,
u'\r\n\t\t\t\t']

您可以执行以下操作

[u''.join(third_cell.xpath('./a/text()|./text()').extract()).strip()
 for third_cell in selector.xpath('//table/tr[position()>1]/td[3]')]
i、 e.在每个表行的第三个单元格上循环(从第2行开始),并将所有文本元素连接到一个字符串中


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

谢谢你的回答。提供的解决方案有效,但仅部分有效。作为一个真实例子的结果,我得到了以下信息:[u'\r\n\t\t\t\t',u'\r\n\t\t\t\r\n\t\t\t\t3.20\xa0\xa0\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\r\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\do wysoko\u015bci limitu:\r\n\t\t\t\twe wskazaniach:choroba afektywna Dhubiegunowa,schizofrenia\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t,u'\r\n\n\n\t\t\t\t\t\t\t\t\t\t\t']仍然需要大量的格式。也许源代码对您的网页有帮助:建议使用您的示例网页