2017-01-04 3 views
2

Ich habe den folgenden Code geschrieben, um Daten von einer Website zu verschrotten.Scrapy JSON Antwort konvertieren in UTF-8 kodieren

import scrapy 
from porua_scrapper.items import Category 
from porua_scrapper.config import SITE_URL 


class CategoriesSpider(scrapy.Spider): 
    name = "categories" 
    start_urls = [] 
    for I in range(2): 
     url = SITE_URL + "book/categories?page=" + str(I+1) 
     start_urls.append(url) 

    print(start_urls) 


    def parse(self, response): 
     # print(response.css('ul.categoryList li div.pFIrstCatCaroItem a').extract_first()) 

     for category in response.css('ul.categoryList li'): 
      categoryObj = Category() 

      categoryObj['name'] = category.css('div.bookSubjectCaption h2::text').extract_first() 
      categoryObj['url'] = category.css('a::attr(href)').extract_first() 

      yield categoryObj 

Wenn ich den Befehl scrapy crawl categories -o categories.json laufen werde es categories.json-Datei erstellen, die das gewünschte Ausgabeformat enthält. Aber das Problem ist, dass einige meiner Inhalte bengali Text enthält. So wird in der erzeugten Ausgabedatei bekam ich Antwort wie:

{"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"}

Wie soll ich den Inhalt in utf-8 kodieren soll? Da ich neu in scrapy bin, habe ich keine passende Lösung basierend auf meinem Szenario gefunden.

Vielen Dank im Voraus!

Antwort

7

Zunächst einmal ist {"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"} gültig JSON-Daten

>>> import json 
>>> d = json.loads('''{"url": "/book/category/271/\u09a8\u09be\u099f\u0995", "name": "\u09a8\u09be\u099f\u0995"}''') 
>>> print(d['name']) 
নাটক 

und jedes Programm der Interpretation dieser Daten sollten verstehen (das heißt decode) die Zeichen gut. Python json Modul ruft diese ensure_ascii:

Wenn ensure_ascii wahr ist (Standard), sind alle Nicht-ASCII-Zeichen in der Ausgabe mit \ uXXXX Sequenzen entgangen sind, und das Ergebnis ist eine str Beispiel nur aus ASCII-Zeichen.

Dies ist, was Scrapy Feed Exporteur standardmäßig für JSON-Ausgabe verwendet.

Wenn Sie jedoch die JSON-Ausgabedatei benötigen, um eine andere Codierung zu verwenden, z. B. UTF-8, können Sie Scrapys FEED_EXPORT_ENCODING setting verwenden.

FEED_EXPORT_ENCODING = 'utf-8' 
Verwandte Themen