Scrapy不接受蜘蛛中的日文字符

时间:2017-07-09 23:02:12

标签: python python-2.7 scrapy

以下是我试图搜索的网站源代码的一部分。

<th>会社名</th>
<td colspan="2">
    <p class="realtorName">
        <ruby>株式会社エリア・エステート 川崎店</ruby>
    </p>
</td>

这只是一个测试蜘蛛,看看scrapy是否正在获取任何数据

# -*- coding: utf-8 -*-
import scrapy


class TestSpider(scrapy.Spider):
    name = "test"
    allowed_domains = ["homes.co.jp"]
    start_urls = ['http://www.homes.co.jp/realtor/mid-122457hNYEJwIO7kDs/']

    def parse(self, response):
        yield{
            'FAX':response.xpath('//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "FAX")]/following-sibling::td/text()').extract(),
            'Company_Name':response.xpath('//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "会社名")]/following-sibling::td/p[1]/ruby/text()').extract(),
            'TEl':response.xpath('//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "TEL")]/following-sibling::td/text()').extract(),



            }

'TEL'和'FAX'字段会返回数据,但scrapy会为字段'Company_Name'抛出错误

错误:

All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters.

我想要做的是用日语匹配该字符串,并从上述源代码中提到的兄弟标记中获取文本。

奇怪的事实是它昨天跑了并且刮掉了数据。现在它正在返回错误。

我是否需要做一些事情来包含日文字符?

2 个答案:

答案 0 :(得分:1)

尝试附加u附加字符串,就像这样

'Company_Name':response.xpath(u'//*[@id="anchor_realtorOutline"]/div[1]/table/tbody/tr/th[contains(text(), "会社名")]/following-sibling::td/p[1]/ruby/text()').extract(),

答案 1 :(得分:0)

你的xpath无法工作的原因是tbody。您必须将其删除并检查是否得到了您想要的结果。

您可以在scrapy文档中阅读:http://doc.scrapy.org/en/0.14/topics/firefox.html

  

Firefox尤其以添加<tbody>元素而着称   表。另一方面,Scrapy不会修改原始页面   HTML,因此如果您使用<tbody>,则无法提取任何数据   你的XPath表达式。