Атрибуты элементов Scrapy для XmlItemExporter - PullRequest
0 голосов
/ 12 марта 2020

Я могу удалить данные с веб-сайта, но мне нужно экспортировать их в XML.

Для этой цели я определил сериализатор следующим образом:

import scrapy
from scrapy.exporters import is_listlike, XmlItemExporter

import six

class AttrXmlItemExporter(XmlItemExporter):
    def __init__(self, file, **kwargs):
        super(CustomXmlItemExporter, self).__init__(file,
                                                    root_element="root",
                                                    item_element="property",
                                                    **kwargs)
    def _export_xml_field(self, name, serialized_value, depth):
        # Custom code:
        attrs = {}
        if isinstance(serialized_value, dict):
            serialized_value = serialized_value.copy()
            attr_keys = [k for k in serialized_value.keys() if k.startswith('_')]
            attrs = {k[1:]: serialized_value.pop(k) for k in attr_keys}

        # Default implementation (except for startElement call)
        self._beautify_indent(depth=depth)
        self.xg.startElement(name, attrs)
        if hasattr(serialized_value, 'items'):
            self._beautify_newline()
            for subname, value in serialized_value.items():
                self._export_xml_field(subname, value, depth=depth + 1)
            self._beautify_indent(depth=depth)
        elif is_listlike(serialized_value):
            self._beautify_newline()
            for value in serialized_value:
                self._export_xml_field('value', value, depth=depth + 1)
            self._beautify_indent(depth=depth)
        elif isinstance(serialized_value, six.text_type):
            self._xg_characters(serialized_value)
        else:
            self._xg_characters(str(serialized_value))
        self.xg.endElement(name)
        self._beautify_newline()

Для выхода Я использую элементы как:

Item['images'] = {
   'image' : {
        '_id' : incr,
        'url' :imgurl
   }
}

Я ожидаю вывода xml Файл как:

<images>
  <value>
    <image id="1">
       <url>
          img_2500.jpg_800x600.jpg
       </url>
   </image>
  </value>
<images>

Пожалуйста, дайте мне знать, какую ошибку я делаю. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...