При сохранении результатов Scrapy в базу данных, как избежать хранения дубликатов - PullRequest
0 голосов
/ 07 апреля 2020

Я только начинаю с scrapy и пытаюсь разработать проект, в котором я собираю «новостные ссылки» с веб-сайтов. Например, есть веб-сайт iltalehti.fi, и я хотел бы просматривать их новости, скажем, каждые 5 минут. Так как каждый обход будет возвращать дубликаты, как мне избежать сохранения этих дубликатов в моей базе данных? Таким образом, конечным результатом будет база данных, содержащая только разные записи, но не одну и ту же новостную ссылку дважды (или 200 раз в сценарии, если я запускаю сканер каждые 5 минут).

Любая помощь более чем приветствуется, и пожалуйста, обратите внимание Я очень мало знаю от python!

1 Ответ

0 голосов
/ 07 апреля 2020

Scrapy использует конвейеры, чтобы выполнить дополнительную обработку (проверку и фильтрацию) данных, которые извлекаются с веб-сайтов.

Вы можете написать пиплайн, который будет использоваться для проверки уникальных элементов и отбрасывания элементов. которые являются дубликатами.

Вот пример из python документов:

from scrapy.exceptions import DropItem

class DuplicatesPipeline(object):

    def __init__(self):
        self.ids_seen = set()

    def process_item(self, item, spider):
        if item['id'] in self.ids_seen:
            raise DropItem("Duplicate item found: %s" % item)
        else:
            self.ids_seen.add(item['id'])
            return item

Подробнее о конвейерах здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...