#python #xml #scrapy #pipeline
#python #xml #scrapy #конвейер
Вопрос:
Мне нужно создать паук, который должен выводить XML-файл для любой статьи.
The pipeline.py:
from scrapy.exporters import XmlItemExporter
from datetime import datetime
class CommonPipeline(object):
def process_item(self, item, spider):
return item
class XmlExportPipeline(object):
def __init__(self):
self.files = {}
def process_item(self, item, spider):
file = open((spider.name datetime.now().strftime("_%H%M%S%f.xml")), 'w b')
self.files[spider] = file
self.exporter = XmlItemExporter(file)
self.exporter.start_exporting()
self.exporter.export_item(item)
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()
return item
Вывод:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<text_img> Nelson Argaña. Foto: Gustavo Velázquez 970AM. Hace 1 hora </text_img>
<title>Nelson Argaña lamentó que Mario Abdo esté rodeado de corruptos </title>
<url>https://www.lanacion.com.py/politica/2019/03/23/nelson-argana-lamento-que-mario-abdo-este-rodeado-de-corruptos/</url>
<content> Nelson Argaña, hijo de Luis María Arg ...</content>
<sum_content>4805</sum_content>
<time>14:30:06</time>
<date>20190323</date>
</item>
</items>
Но мне нужен вывод, подобный этому:
<?xml version="1.0" encoding="iso-8859-1"?>
<article>
<text_img> Nelson Argaña. Foto: Gustavo Velázquez 970AM. Hace 1 hora </text_img>
<title>Nelson Argaña lamentó que Mario Abdo esté rodeado de corruptos </title>
<url>https://www.lanacion.com.py/politica/2019/03/23/nelson-argana-lamento-que-mario-abdo-este-rodeado-de-corruptos/</url>
<content> Nelson Argaña, hijo de Luis María Arg ...</content>
<sum_content>4805</sum_content>
<time>14:30:06</time>
<date>20190323</date>
</article>
The settings.py:
ITEM_PIPELINES = {
'common.pipelines.XmlExportPipeline': 300,
}
FEED_EXPORTERS_BASE = {
'xml': 'scrapy.contrib.exporter.XmlItemExporter',
}
Я попытался добавить в settings.py:
FEED_EXPORT_ENCODING = 'iso-8859-1'
FEED_EXPORT_FIELDS = ["article"]
Но это не работает.
Я использую Scrapy 1.4.0
Комментарии:
1. Попробуйте (внутри
process_item
) —self.exporter = XmlItemExporter(file, item_element="article", root_element="articles")
. Смотрите docs.scrapy.org/en/latest/topics/exporters.html#xmlitemexporter2. Спасибо за ваш комментарий. Я пробовал этот вариант, но мне нужен только тег <article>, а не <articles><статья>. Это обязательный запрос и кодировка тоже.
3. Поэтому используйте только ‘item_element’
4. Это не работает. Root_element по умолчанию отображается как <элементы> . Я пробовал root_element=False, root_element=None, root_element =»но это не работает. То же самое происходит в обратном порядке.