Эффективный способ очистки изображений с веб-сайта в Django / Python - PullRequest
0 голосов
/ 09 мая 2018

Сначала я должен сказать, что я все еще немного новичок в Django / Python. Я нахожусь в центре проекта, который позволяет пользователям вводить URL, сайт очищает контент с этой страницы и возвращает изображения с определенным размером и тег заголовка страницы, чтобы пользователь мог затем выбрать, какое изображение он хочет использовать на своих профиль. Я предполагаю довольно стандартный сценарий. У меня это работает, используя Selenium (браузер Chrome без головы), чтобы получить содержимое страницы назначения, какой-то Python для определения размера файла, а затем мой вид Django выкладывает все это в шаблон. Затем я закодировал его так, что выбранное пользователем изображение будет загружено и сохранено локально.

Однако я серьезно сомневаюсь в масштабируемости этого, в настоящее время он работает только локально, и я очень обеспокоен тем, как бы это справилось, если бы одновременно работало много пользователей. Я запускаю этот хромированный браузер без головы каждый раз, когда делается запрос, который звучит неэффективно, мне нужно загрузить изображение, чтобы определить его размер, чтобы я мог решить, достаточно ли он большой. Один пример потребовал 12 секунд, чтобы я отправил URL-адрес для отображения результатов пользователю, тогда как тот же целевой URL-адрес, введенный через www.kit.com (они имеют очень похожую функциональность веб-поиска), занял 3 секунды.

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

  • Чтобы разрешить пользователю вводить URL-адрес и возвращать все изображения (или только URL-адреса этих изображений) с этой страницы в определенном размере (ширина / высота) и заголовок страницы.

  • Чтобы это было наиболее эффективным решением, учитывая, что оно будет одновременно выполняться несколькими пользователями одновременно.

  • Для того, чтобы он работал в среде Django (2.0) / Python (3+).

Я не полностью против использования API стороннего сервиса, если таковой существует, но это был бы мой наименее предпочтительный вариант.

Любая помощь / указатели будут высоко оценены.

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете использовать 2 решения Python в вашем случае:
1) BeautifulSoup , а здесь - хороший ответ, как загрузить изображения, используя его. Вам просто нужно сделать его отдельной функцией и передать в качестве аргумента site. Но также очень просто разобрать только ссылок на изображения , как вы сказали - в зависимости от скорости, которая вам нужна (очевидно, что очистка файлов, особенно при их большом количестве, будет намного медленнее, чем ссылки) , Этот инструмент предназначен только для анализа и удаления содержимого страницы.

2) Scrapy - это гораздо более мощный инструмент, фреймворк, с его помощью вы можете подключить своего паука к моделям Django, работать с изображениями намного эффективнее, используя его встроенное изображение -pipelines. Это намного более гибко, с большим количеством функций, как работать со списанными данными. Я не уверен, если вам нужно использовать его в вашем проекте, и если он не подавлен в вашем случае.

Также я советую запустить паука в некоторых фоновых задачах, таких как Queue или Celery , и вызвать результат через AJAX, потому что для анализа содержимого может потребоваться некоторое время - так что не Пользователь не должен ждать ответа.

Постскриптум Вы даже можете комбинировать эти 2 инструмента в некоторых случаях:)

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