python - Scrapy 如何使用 Loader 忽略带有空白字段的项目

标签 python scrapy scrapyd

我想知道如何忽略未填写所有字段的项目,某种丢弃,因为在 scrapyd 的输出中我得到的页面未填写所有字段。

我有那个代码:

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()
    )

解析器:

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

我想用 Loader 来完成它,而不需要用我自己的 Selector 创建(以避免处理项目两次)。我想我可以将它们放在管道中,但这可能不是最好的方法,因为这些项目无效。

最佳答案

数据验证是管道的典型用例之一。在您的情况下,您只需要编写一些少量代码来检查必填字段,大致如下:

from scrapy.exceptions import DropItem

class YourPersonalPipeline(object):
    def process_item(self, item, spider):
        required_fields = [] # your list of required fields
        if all(field in item for field in required_fields):
            return item
        else:
            raise DropItem("your reason")

您需要在 settings.py 中启用管道 Read more in scrapy docs .

关于python - Scrapy 如何使用 Loader 忽略带有空白字段的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23810650/

相关文章:

python - 从 Splash 请求中读取 cookie

python - Scrapy - shell 中的 301 重定向

python - 解析 ajax 响应以检索 Scrapy 中的最终 url 内容?

python - 如何将 scrapy 服务器作为守护进程运行

python - 在 Django 中处理用户触发事件的正确方法是什么?

python - 在 Python 中将索引列表传递到另一个列表。语法正确吗?

python - 像 Matlab 一样在 numpy 中打印子数组

python - 如何使用Python将文件上传到MediaWiki?

python - 使用外部包部署 scrapyd spider