Я могу удалить данные с веб-сайта, но мне нужно экспортировать их в 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>
Пожалуйста, дайте мне знать, какую ошибку я делаю. Заранее спасибо.