Scrapy Crawl:无法将数据解析为人类可读的值

2024-03-28 22:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用scrapy抓取一个网站。一切都很好,直到我遇到了这个特殊的问题。在

下面是我如何获取值

hxs.select("//table[@class='bodypad']//table/tr[1]/td//tr[10]//td[2]/text()").extract()[0].strip()

以下是输出

^{pr2}$

我还可以看到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.&nbsp;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.&nbsp;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>`

Tags: 网站styletablewidthselecttrclasstd
1条回答
网友
1楼 · 发布于 2024-03-28 22:28:25

\xa0是{a1},在网页中显示为一个简单的空格。Is代码是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之前,必须手动将其替换为一个简单的空格。在

默认情况下^{}只删除空白,因此您应该手动删除字符/ -。在

这应该是有效的:

^{pr2}$

相关问题 更多 >