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