python - स्लैविक वर्णों के साथ स्क्रैप किए गए डेटा को सीएसवी में लिखने की समस्याएं(यूनिकोडएएनकोडएर्रॉंटर और टाइपएरर)



csv encoding (1)

चेक वेबसाइटों को खरोंच करने के लिए मैं क्या उपयोग करता हूं और इस त्रुटियों से बचने के लिए यूनिडोडोड मॉड्यूल है यूनिकोड पाठ के एएससीआईआई लिप्यंतरण क्या है?

# -*- coding: utf-8 -*-
from unidecode import unidecode

class BezrealitkySpider(scrapy.Spider):
    name = 'bezrealitky'
    start_urls = [
        'https://www.bezrealitky.cz/vypis/nabidka-prodej/byt/praha'
    ]
    def parse(self, response):
        item = BezrealitkyItem()
        items = []
        for records in response.xpath('//*[starts-with(@class,"record")]'):
            item['title'] = unidecode(response.xpath('.//div[@class="details"]/h2/a[@href]/text()').extract()[1].encode('utf-8'))
            items.append(item)
        return(items)

चूंकि मैं एक मद लोडर का उपयोग करता हूं, मेरा कोड इस तरह दिखता है:

# -*- coding: utf-8 -*-
from scrapy.loader import ItemLoader

class BaseItemLoader(ItemLoader):
    title_in = MapCompose(unidecode)

इरादा / अपेक्षित परिणाम:

एक चेक वेबसाइट से लिंक खिताब (प्रत्येक आइटम के लिंक के पाठ) को परिमार्जन करने के लिए:

https://www.bezrealitky.cz/vypis/nabidka-prodej/byt/praha

और परिणाम को एक सीएसवी फ़ाइल में प्रिंट करें। प्राथमिक रूप से एक सूची में ताकि मैं बाद में किसी अन्य पायथन डेटा विश्लेषिकी मॉडल में डेटा को हेरफेर कर सकता हूं।

परिणाम / समस्या:

मुझे एक यूनिकोडएएनएक्सएआरआर और एक प्रकार एरर मिल रहा है मुझे संदेह है कि इसे चेक-भाषा में मौजूद गैर-सामान्य वर्णों के साथ करना है कृपया ट्रेसबैक के लिए नीचे देखें।

वापस ट्रेस करें:

प्रकार त्रुटि ट्रेसबैक:

2017-01-19 08:00:18 [scrapy] ERROR: Error processing {'title': b'\n                                Ob\xc4\x9bt\xc3\xad 6. kv\xc4\x9b'
          b'tna, Praha - Kr\xc4\x8d                            '}
Traceback (most recent call last):
  File "C:\Users\phili\Anaconda3\envs\py35\lib\site-packages\twisted\internet\defer.py", line 651, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "C:\Users\phili\Documents\Python Scripts\Scrapy Spiders\bezrealitky\bezrealitky\pipelines.py", line 24, in process_item
    self.exporter.export_item(item)
  File "C:\Users\phili\Anaconda3\envs\py35\lib\site-packages\scrapy\exporters.py", line 193, in export_item
    self._write_headers_and_set_fields_to_export(item)
  File "C:\Users\phili\Anaconda3\envs\py35\lib\site-packages\scrapy\exporters.py", line 217, in _write_headers_and_set_fields_to_export
    self.csv_writer.writerow(row)
  File "C:\Users\phili\Anaconda3\envs\py35\lib\codecs.py", line 718, in write
    return self.writer.write(data)
  File "C:\Users\phili\Anaconda3\envs\py35\lib\codecs.py", line 376, in write
    data, consumed = self.encode(object, self.errors)
TypeError: Can't convert 'bytes' object to str implicitly

यूनिकोडएनकोडएपर ट्रेसबैक:

2017-01-19 08:00:18 [scrapy] ERROR: Error processing {'title': b'\n                                Ob\xc4\x9bt\xc3\xad 6. kv\xc4\x9b'
          b'tna, Praha - Kr\xc4\x8d                            '}
Traceback (most recent call last):
  File "C:\Users\phili\Anaconda3\envs\py35\lib\site-packages\twisted\internet\defer.py", line 651, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "C:\Users\phili\Documents\Python Scripts\Scrapy Spiders\bezrealitky\bezrealitky\pipelines.py", line 24, in process_item
    self.exporter.export_item(item)
  File "C:\Users\phili\Anaconda3\envs\py35\lib\site-packages\scrapy\exporters.py", line 198, in export_item
    self.csv_writer.writerow(values)
  File "C:\Users\phili\Anaconda3\envs\py35\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u011b' in position 37: character maps to <undefined>

स्थिति / प्रक्रिया:

मैं स्कैरी क्रॉल बेज़रिलाइटी (यानी मकड़ी का नाम) चल रहा हूं। मैंने पाइपलाइन को इंटरनेट पर पाया CSVItemExporter के साथ कॉन्फ़िगर किया है, और फ़ाइल खोलते समय इसे यूटीएफ -8 सांकेतिक शब्दों में बदलना करने की कोशिश की थी (मैंने भी यूटीएफ -8 को बिना किसी शुरुआत में भी कोशिश की, लेकिन एक ही त्रुटि)।

मेरा पाइपलाइन कोड:

from scrapy.conf import settings
from scrapy.exporters import CsvItemExporter
import codecs


class CsvPipeline(object):
    def __init__(self):
        self.file = codecs.open("booksdata.csv", 'wb', encoding='UTF-8')
        self.exporter = CsvItemExporter(self.file)
        self.exporter.start_exporting()

    def close_spider(self, spider):
        self.exporter.finish_exporting()
        self.file.close()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

मेरी सेटिंग्स फ़ाइल:

BOT_NAME = 'bezrealitky'

SPIDER_MODULES = ['bezrealitky.spiders']
NEWSPIDER_MODULE = 'bezrealitky.spiders'

# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'bezrealitky.pipelines.CsvPipeline': 300,

मेरा मकड़ी कोड:

class BezrealitkySpider(scrapy.Spider):
    name = 'bezrealitky'
    start_urls = [
        'https://www.bezrealitky.cz/vypis/nabidka-prodej/byt/praha'
    ]
    def parse(self, response):
        item = BezrealitkyItem()
        items = []
        for records in response.xpath('//*[starts-with(@class,"record")]'):
            item['title'] = response.xpath('.//div[@class="details"]/h2/a[@href]/text()').extract()[1].encode('utf-8')
            items.append(item)
        return(items)

समाधान अब तक की कोशिश की:

  • निकालने () कमांड में .encode ('utf-8) जोड़ने और हटाने के लिए, और भी pipeline.py में लेकिन यह काम नहीं किया।
  • शुरुआत करने के लिए # - - कोडींग: यूटीएफ -8 - - को जोड़ने का भी प्रयास किया गया, या तो काम नहीं किया
  • मैंने कंसोल में utf-8 को अजगर कोड को बदलने की कोशिश की:

    सीसीपी 65001

    PYTHONIOENCODING = यूटीएफ -8 सेट करें

निष्कर्ष:

मुझे स्क्रैप डेटा को CSV फ़ाइल में लिखने के लिए नहीं मिल रहा है, सीएसवी बनाया गया है लेकिन इसमें कुछ भी नहीं है भले ही शेल में मैं देख सकता हूं कि डेटा स्क्रैप किया गया है लेकिन इसे ठीक से एन्कोड नहीं किया गया है और कोई त्रुटि नहीं डालती है, इससे पहले कि वह फ़ाइल फाइल करने का प्रयास करे।

मैं इस के साथ पूर्ण शुरुआत कर रहा हूं, सिर्फ स्क्रेपी लेने की कोशिश कर रहा हूं वास्तव में मैं किसी भी मदद की सराहना करूंगा!





scrapy