2016-05-10 8 views
1

Итак, я работаю над веб-приложением python, это поисковая система для спортивных товаров (спортивные наряды, инструменты ... и т. Д.). В основном он должен искать заданное ключевое слово в нескольких магазинах и сравнивать результаты, чтобы вернуть 20 лучших результатов.Каков наиболее эффективный способ извлечения данных в этом случае?

Я думал, что лучший и простой способ сделать это - написать файл json, в котором содержатся правила скрепера о том, как извлекать данные на каждом веб-сайте. Например, для:

[{"www.decathlon.com" : { "rules" : { "productTag" : "div['.product']", 
"priceTag" : "span[".price"]" } }] 

Так что для десятиборья, чтобы получить товар, мы ищем теги div с классом продукта.

У меня есть список около 10 - 15 сайтов для царапин. Поэтому для каждого веб-сайта он переходит к rules.json, см. Соответствующие правила и использует их для извлечения данных.

Pros для этого метода: Очень легко писать, нам необходимо минимальное питон скрипт для логики о том, как читать и карту URLs к их правилам и извлекать данные через BeautifulSoup + Это также очень легко добавить, удалить новые URL-адреса и их правила.

Недостатки этого метода: Для каждого поиска мы запускаем запрос на каждый веб-сайт, поэтому одновременно делаем около 10 запросов, а затем сравниваем результаты, поэтому, если 20 пользователей будут искать одновременно, у нас будет около 200 запросы, которые замедлят наше приложение!

Другой метод:

Я думал, что мы могли бы иметь огромный список ключевых слов, а затем в 00:00, запуск сценария запросов на все адреса для каждого ключевого слова в списке, сравнить их, то сохраните результаты в CouchDB, который будет использоваться через день, и он будет обновляться ежедневно. Единственная проблема с этим методом заключается в том, что почти невозможно иметь список всех возможных ключевых слов.

Так что, пожалуйста, помогите мне в том, как я должен продолжить это? Учитывая, что у меня мало времени.

ответ

1

По строкам вашего списка «keyword»: вместо сохранения списка всех возможных ключевых слов, возможно, вы могли бы поддерживать приоритетную очередь ключевых слов с важностью, основанную на том, как часто выполняется поиск ключевого слова. Когда встречается новое ключевое слово, добавьте его в список, иначе обновите его при каждом поиске. Запустите скрипт, чтобы запрашивать URL-адреса для верхнего, скажем, 30 ключевых слов каждый день (более или менее в зависимости от того, как часто выполняется поиск слов и что вы хотите делать).

Это не обязательно решает вашу проблему из-за слишком большого количества запросов, но может уменьшить вероятность того, что она станет слишком большой проблемой.

1

HTTP-запросы могут быть очень дорогими. Вот почему вы хотите убедиться, что вы распараллеливаете свои запросы, и для этого вы можете использовать что-то вроде Celery. Таким образом, вы сократите общее время до самого медленного отвечающего веб-сайта. Возможно, рекомендуется установить время ожидания запроса на более короткое время (5 секунд?), Если один из сайтов не отвечает на ваш запрос. Имейте возможность помечать домен как «вниз/не отвечать» и иметь возможность обрабатывать эти исключения.

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

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