我正在使用scrapy抓取一个网站。一切都工作得很好,直到我遇到了这个特殊问题的几个值。
以下是我获取值的方法
hxs.select("//table[@class='bodypad']//table/tr[1]/td//tr[10]//td[2]/text()").extract()[0].strip()
以下是输出
u'Rs.\xa05,000\n\r\n\t\t\t\t\t / -'
我还可以看到strip()方法也不适用于此值。以下是我的代码中此代码正常工作的部分
hxs.select("//table[@class='bodypad']//table/tr[1]/td//tr[10]//td[2]/text()").extract()[2]
输出:
u'Rs. 1,000'
当我使用.encode('ascii')时,我得到了我需要的东西:
'Rs. 1,000'
你能建议我怎样做才能获得第一个价值,在网站看起来像Rs。 5,000 / -
。我想得到类似的东西,.encode('ascii')也不适用于第一个值。
编辑 - 示例HTML输入
<table width="100%" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tbody><tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Minimum Initial Investment</b></td>
<td class="table_bdtext_style">
Rs. 5,000
/ -
</td>
</tr>
<tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Minimum Subsequent Investment</b></td>
<td class="table_bdtext_style">
Rs. 1,000
/ -
</td>
</tr>
<!--
<tr class="table_bdrow1_style">
<td width="40%" class=table_header_style><b>Minimum RSP Investment</b></td>
-->
<!--<td class=table_bdtext_style width="55%">-</td>-->
<!--
<td class=table_bdtext_style>-</td>
</tr>
-->
<tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Minimum Redemption Amount</b></td>
<td class="table_bdtext_style">Rs. 1,000</td>
</tr>
<!--
<tr class="table_bdrow1_style">
<td width="40%" class=table_header_style valign="top"><b>Minimum Holding</b></td>
<td class=table_bdtext_style>-
</td>
</tr>
<tr class="table_bdrow1_style">
<td width="40%" class=table_header_style><b>Cooling-off Period</b></td>
<td class=table_bdtext_style>-</td>
</tr>
-->
<tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Minimum Holding Period</b></td>
<td class="table_bdtext_style">-</td>
</tr>
<tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Transaction Time for Redemption</b></td>
<td class="table_bdtext_style">1:50 PM</td>
</tr>
<tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Entry Load</b></td>
<td class="table_bdtext_style">-</td>
</tr>
<tr class="table_bdrow1_style">
<td width="40%" class="table_header_style"><b>Exit Load</b></td>
<td class="table_bdtext_style">0.25% if the investments is redeemed / switched out within 1 month form the date of allotment
</td>
</tr>
</tbody></table>`
答案 0 :(得分:1)
\xa0
是Non-breaking space,在网页中显示为简单空格。代码是A0
,它超出了ASCII范围(0-127):
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> u'Rs.\xa05,000\n\r\n\t\t\t\t\t / -'.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 3: ordinal not in range(128)
因此,在将其编码为ASCII之前,必须手动将其替换为一个简单的空格。
默认str.strip
仅剥离空格,因此您应手动删除字符/ -
。
这应该有效:
>>> u'Rs.\xa05,000\n\r\n\t\t\t\t\t / -'.replace(u'\xa0', u' ').encode().rstrip('-/ ').strip()
'Rs. 5,000'
>>>