Chciałbym wiedzieć, jak zignorować przedmioty, które nie wypełniają wszystkich pól, coś w rodzaju upuszczania, ponieważ w wynikach scrapydu dostaję strony, które nie wypełnić wszystkie pola.Scrapy jak ignorować przedmioty z pustymi polami za pomocą Loader
mam tego kodu:
class Product(scrapy.Item):
source_url = scrapy.Field(
output_processor = TakeFirst()
)
name = scrapy.Field(
input_processor = MapCompose(remove_entities),
output_processor = TakeFirst()
)
initial_price = scrapy.Field(
input_processor = MapCompose(remove_entities, clear_price),
output_processor = TakeFirst()
)
main_image_url = scrapy.Field(
output_processor = TakeFirst()
)
Parser:
def parse_page(self, response):
try:
l = ItemLoader(item=Product(), response=response)
l.add_value('source_url', response.url)
l.add_css('name', 'h1.title-product::text')
l.add_css('main_image_url', 'div.pics a img.zoom::attr(src)')
l.add_css('initial_price', 'ul.precos li.preco_normal::text')
l.add_css('initial_price', 'ul.promocao li.preco_promocao::text')
return l.load_item()
except Exception as e:
print self.log("#1 ERRO: %s" % e), response.url
Chcę to zrobić z ładowaczem bez konieczności tworzenia z własną Selector (aby uniknąć przetwarzania elementów dwukrotnie). Myślę, że mogę je upuścić, ale prawdopodobnie nie jest to najlepszy sposób, ponieważ te pozycje nie są poprawne.
Zrzucanie przedmiotów w rurociągu nie jest złą drogą, wręcz przeciwnie - IMHO. –