2013-03-20 2 views
2

Пожалуйста, помогите мне решить следующий случай:Scrapy Case: инкрементальное обновление предметов

Представьте себе типичную категорию категорий. Страница со списком элементов. Когда вы нажимаете на объекты, вы попадаете на внутренние страницы. Теперь мой искатель сбрасывает все эти URL-адреса, а затем сбрасывает эти URL-адреса, чтобы получить информацию об этом элементе, проверьте, не является ли начальный URL-адрес семян как любая следующая страница. Если он есть, он перейдет на следующую страницу и сделает то же самое. Я сохраняю эти элементы в базе данных sql.

Скажем, через 3 дня появились новые itmes в URL-адресе Seed, и я хочу отказаться только от новых элементов. Возможные решения:

  1. Во время выскабливания каждого элемента, проверить в базе данных, чтобы увидеть, если URL уже Царапины. Если это так, я просто попрошу Scrapy перестать ползать дальше. Проблема: я не хочу каждый раз запрашивать базу данных. Моя база данных будет очень большой, и она в конечном итоге сделает сканирование супер медленным.

  2. Я пытаюсь сохранить последний очищенный URL-адрес и передать его в начале, и в тот момент, когда он находит этот last_scraped_url, он просто останавливает искатель. Невозможно, учитывая, что асинхронный характер обходных URL-адресов не очищается в том же порядке, в каком они получены от начальных URL-адресов. (я перепробовал все методы, чтобы сделать это в упорядоченно - но это вообще невозможно)

Кто-нибудь может предложить какие-либо другие идеи? Я боролся за это последние три дня.

Цените свои ответы.

+0

Как создаются элементы в URL-адресе семян? У вас есть контроль над этим? –

ответ

0

Прежде чем пытаться дать вам идею ...

Я должен сказать, что я хотел бы попробовать первый свой вариант базы данных. Базы данных создаются именно для этого, и даже если ваша БД становится очень большой, это не должно сильно сканировать. И один урок, который я узнал: «Сначала сделайте тупое воплощение, после чего вы попытаетесь оптимизировать». В большинстве случаев, когда вы сначала оптимизируете, вы просто оптимизируете неправильную часть.

Но, если вы действительно хотите другую идею ... По умолчанию Scrapy не сканирует один и тот же URL-адрес два раза. Таким образом, перед запуском сканирования вы можете поместить уже очищенные URL (за 3 дня до этого) в список, который Scrapy использует, чтобы узнать, какие URL уже были посещены. (Я не знаю, как это сделать.) Или, проще, в вашем парсере товаров вы можете просто проверить, был ли url уже очищен и возвращен None или очистить новый предмет соответственно.

Смежные вопросы