Пользовательский вывод в XML в Scrapy с lxml.Следующий элемент перезаписывает предыдущий - PullRequest
0 голосов
/ 20 февраля 2019

В Scrapy, с lxml, я создал собственный конвейер для генерации xml в соответствии с моими потребностями.Xml создается, но есть ошибка: следующая группа (элементы) в списке перезаписывает предыдущую.То есть независимо от len() списка сохраняется только группа (элементы).Код ниже.Кто-нибудь мне поможет?

Даже ссылаясь на ту же тему, это не дубликат этого вопроса : PS: Как вы добавляете файл в Python? Ибо есть причуды, такие как сохранение верхних и нижних колонтитулов XML.

# -*- coding: utf-8 -*-
from yt.items import Lista
import lxml.etree
import lxml.builder

class ytXmlPipeline(object):

    def process_item(self, item, spider):
        E = lxml.builder.ElementMaker()
        ITEMS = E.items
        CHANNEL = E.channel
        TITLE = E.title
        LOGO= E.logo_30x30
        SINOPSE = E.description
        STREAM = E.stream_url
        lista = ITEMS( 
                CHANNEL(
                    TITLE('<![CDATA['+item["title"]+']]>'),
                    LOGO('<![CDATA['+item["logo_30x30"]+']]>'),
                    SINOPSE('<![CDATA[<center><img height="254" width="200" src="'+item["logo_30x30"]+'"/><p>'+item["description"]+'</p></center>]]>'),
                    STREAM('<![CDATA['+item["stream_url"]+']]>'),
                    )
                )

        # create a new XML file with the results
        mydata = lxml.etree.tostring(lista, encoding='utf-8', pretty_print=True, xml_declaration = True, method="xml") 
        mydata = mydata.replace('&lt;','<').replace('&gt;','>')
        myfile = open("ytLista.xml", "w")
        myfile.write(mydata)
...