Tôi muốn biết cách bỏ qua các mục không điền vào tất cả các trường, một số loại bỏ, vì trong kết quả của scrapyd tôi nhận được các trang không điền vào tất cả các trường.Phế liệu cách bỏ qua các mục có trường trống bằng Trình tải
tôi có mã rằng:
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
Tôi muốn làm điều đó với Loader mà không cần phải tạo ra với Selector của riêng tôi (để tránh mặt hàng chế biến hai lần). Tôi đoán rằng tôi có thể thả chúng vào đường ống nhưng có lẽ đó không phải là cách tốt nhất vì các mục này không hợp lệ.
Việc bỏ các mục trong một đường ống không phải là một cách xấu, hoàn toàn là IMHO đối diện. –