跳转到主要内容

Scrapy扩展,用于使用MongoEngine文档编写抓取项

项目描述

ScrapyMongoEngine结合在一起。

PyPI Version Build Status GPL-2.0-only OR LGPL-2.1-or-later

scrapy-mongoengine-item是一个扩展,允许您使用现有的MongoEngine文档定义Scrapy items

文档可在Read the Docs上找到。

先决条件

支持Python 2.7Python 3.5/3.6。对于Python 3,您需要Scrapy v1.1或更高版本。

最新测试的MongoEngine版本是MongoEngine 0.17.0

安装

  1. 从PyPI安装最新稳定版本

    pip install scrapy-mongoengine-item

    或从GitHub安装最新稳定版本

    pip install https://github.com/barseghyanartur/scrapy-mongoengine-item/archive/stable.tar.gz

    或从BitBucket安装最新稳定版本

    pip install https://bitbucket.org/barseghyanartur/scrapy-mongoengine-item/get/stable.tar.gz

简介

MongoEngineItem是一个类,其字段定义来自MongoEngine文档,您只需创建一个MongoEngineItem并指定与之相关的MongoEngine文档。

除了获取您的项上定义的文档字段外,MongoEngineItem还提供了一个方法,用于使用项数据创建并填充MongoEngine文档实例。

用法

MongoEngineItem 的工作原理如下:您创建一个子类,并定义其 mongoengine_document 属性为一个有效的 MongoEngine 文档。这样,您将获得一个具有每个 MongoEngine 文档字段的字段的项目。

此外,您还可以定义文档中不存在的字段,甚至可以覆盖模型中存在的字段,在项目中定义它们。

让我们看看一些示例

创建用于示例的 MongoEngine 文档

from mongoengine import fields, document

class Person(document.Document):

    name = fields.StringField(max_length=255)
    age = fields.IntField()

定义基本的 MongoEngineItem

from scrapy_mongoengine_item import MongoEngineItem

class PersonItem(MongoEngineItem):

    mongoengine_document = Person

MongoEngineItem 与 Scrapy items 的工作方式相同

p = PersonItem()
p['name'] = 'John'
p['age'] = 22

要从项目获取 MongoEngine 文档,我们调用 MongoEngineItem 的额外方法 MongoEngineItem.save()

person = p.save()
person.name
# 'John'
person.age
# 22
person.id
# 1

当调用 MongoEngineItem.save() 时,文档已保存,我们可以通过使用 commit=False 来防止这种情况。我们可以在 MongoEngineItem.save() 方法中使用 commit=False 来获取一个未保存的文档

person = p.save(commit=False)
person.name
# 'John'
person.age
# 22
person.id
# None

正如之前所说的,我们可以向项目添加其他字段

import scrapy
from scrapy_mongoengine_item import MongoEngineItem

class PersonItem(MongoEngineItem):

    mongoengine_document = Person
    sex = scrapy.Field()
p = PersonItem()
p['name'] = 'John'
p['age'] = 22
p['sex'] = 'M'

并且我们可以用您自己的字段覆盖文档的字段

class PersonItem(MongoEngineItem):

    mongoengine_document = Person
    name = scrapy.Field(default='No Name')

这有助于为字段提供属性,如默认值或其他项目使用的任何属性。这些附加字段在执行 MongoEngineItem.save() 时不会被考虑。

开发

测试

要在您的开发环境中运行测试,请输入以下内容

./runtests.py

要使用所有支持的 Python 版本进行测试,请输入以下内容

tox

运行 MongoDB

最简单的方法是通过 Docker 运行它

docker pull mongo:latest
docker run -p 27017:27017 mongo:latest

编写文档

请保持以下层次结构。

=====
title
=====

header
======

sub-header
----------

sub-sub-header
~~~~~~~~~~~~~~

sub-sub-sub-header
^^^^^^^^^^^^^^^^^^

sub-sub-sub-sub-header
++++++++++++++++++++++

sub-sub-sub-sub-sub-header
**************************

许可协议

GPL-2.0-only OR LGPL-2.1-or-later

支持

对于任何问题,请通过作者部分提供的电子邮件与我联系。

作者

Artur Barseghyan <artur.barseghyan@gmail.com>

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源代码发行版

scrapy-mongoengine-item-0.1.5.tar.gz (4.6 kB 查看哈希)

上传时间 源代码

构建发行版

scrapy_mongoengine_item-0.1.5-py2.py3-none-any.whl (21.1 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面