使用scrapy进行webscraping时字符编码的问题

时间:2013-06-07 18:58:54

标签: python character-encoding web-scraping scrapy

我对文本的编码有问题,我正在从网站上搜索。特别是丹麦的æ,ø和å字母出错了。我确信网页的编码是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'包含æ,ø和å。非常感谢任何帮助!

干杯,

1 个答案:

答案 0 :(得分:2)

好的做一些研究我终于检查了这些字符是indeed those letter but in 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'

哪个是exact AE character encoded in utf-8:)

希望它有所帮助!