Mam spider Scrapy (wersja 1.0.3), w którym wyodrębniam zarówno niektóre dane ze strony internetowej, jak i pobieram plik w ten sposób (uproszczony):Podczas zapisywania zeskanowanego przedmiotu i pliku, Scrapy wstawia puste wiersze w wyjściowym pliku csv
def extract_data(self, response):
title = response.xpath('//html/head/title/text()').extract()[0].strip()
my_item = MyItem()
my_item['title'] = title
file_url = response.xpath('...get url of file...')
file_urls = [file_url] # here there can be more urls, so I'm storing like a list
fi = FileItem()
fi['file_urls'] = file_urls
yield my_item
yield fi
w pipelines.py po prostu zastąpić FilePipeline zmienić nazwę pliku:
from scrapy.pipelines.files import FilesPipeline
class CustomFilesPipeline(FilesPipeline):
def file_path(self, request, response=None, info=None):
filename = format_filename(request.url)
return filename
w items.py mam:
class MyItem(scrapy.Item):
title = scrapy.Field()
class FileItem(scrapy.Item):
file_urls = scrapy.Field()
files = scrapy.Field()
w settings.py mam:
ITEM_PIPELINES = {
'myscraping.pipelines.CustomFilesPipeline': 100
}
teraz w wyjściowym pliku csv mam coś takiego:
title1
title2
,
,
title3
etc.
Wygląda na to, że puste linie (mający tylko przecinek) reprezentuje pobrany plik i I Chciałbym wiedzieć lub uzyskać poradę, jak zapobiec, aby takie linie były w wyjściowym pliku csv. (pliki są zapisywane w folderze).
W ustawieniach Scrapy dowiedziałem się o FEED_STORE_EMPTY (co jest domyślnie fałszywe, tzn. Nie powinno eksportować pustych kanałów), ale nie jest to związane z plikami, jak sądzę.
Mam wrażenie, że to musi coś zrobić z potokami, ale nie mogę wymyślić, jak to zrobić.
Każda pomoc będzie mile widziane
dlaczego nie można umieścić file_urls w pozycji MyItem(), a tylko wydajność jednego rodzaju sprzęcie? – vianney
niesamowite !!! Nigdy o tym nie myślałem (jakoś przeoczyłem w dokumentacji) :) wielkie dzięki – zdenulo