1

我对文本的编码有问题,我正在从网站上抓取。特别是丹麦字母 æ、ø 和 å 出现错误。我确信网页的编码是 UTF-8,因为浏览器使用这种编码正确显示它。

正如许多其他帖子所建议的那样,我已经尝试使用 BeautifulSoup,但这并不是更好。但是,我可能做错了。

我在 Windows 7 32 位操作系统上使用 python 2.7。

我的代码是这样的:

# -*- coding: UTF-8 -*-

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field

class Sale(Item):
    Adresse = Field()
    Pris = Field()
    Salgsdato = Field()
    SalgsType = Field()
    KvmPris = Field()
    Rum = Field()
    Postnummer = Field()
    Boligtype = Field()
    Kvm = Field()
    Bygget = Field()

class HouseSpider(BaseSpider):
    name = 'House'
    allowed_domains = ["http://boliga.dk/"]
    start_urls = ['http://www.boliga.dk/salg/resultater?so=1&type=Villa&type=Ejerlejlighed&type=R%%C3%%A6kkehus&kom=&amt=&fraPostnr=&tilPostnr=&iPostnr=&gade=&min=&max=&byggetMin=&byggetMax=&minRooms=&maxRooms=&minSize=&maxSize=&minsaledate=1992&maxsaledate=today&kode=&p=%d' %n for n in xrange(1, 3, 1)]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select("id('searchresult')/tr")
        items = []      
        for site in sites:
            item = Sale()
            item['Adresse'] = site.select("td[1]/a[1]/text()").extract()
            item['Pris'] = site.select("td[2]/text()").extract()
            item['Salgsdato'] = site.select("td[3]/text()").extract()
            item['SalgsType'] = site.select("td[4]/text()").extract()
            item['KvmPris'] = site.select("td[5]/text()").extract()
            item['Rum'] = site.select("td[6]/text()").extract()
            item['Postnummer'] = site.select("td[7]/text()").extract()
            item['Boligtype'] = site.select("td[8]/text()").extract()
            item['Kvm'] = site.select("td[9]/text()").extract()
            item['Bygget'] = site.select("td[10]/text()").extract()
            items.append(item)
        return items

包含 æ、ø 和 å 的是项目 'Adresse' 和 'Salgstype'。任何帮助是极大的赞赏!

干杯,

4

1 回答 1

2

好吧,做一些研究,我终于检查了这些字符确实是那些字母,但是是 unicode。由于您cmd.exe不了解unicode,因此它会转储字符的字节。

您必须先在 utf-8 中对它们进行编码,然后将代码页更改cmd.exe为 utf-8

做这个:

对于要输出到控制台的每个字符串,调用它的方法encode('utf-8')如下:

print whatever_string.encode('utf-8')

在您的代码和控制台中,在调用您的脚本之前,请执行以下操作:

> chcp 65001
> python your_script.py

在我的 python 解释器中对此进行了测试:

u'\xc6blevangen'.encode('utf-8')
>>>'\xc3\x86blevangen'

这是用 utf-8 编码的确切 AE 字符:)

希望能帮助到你!

于 2013-06-07T19:32:49.757 回答