Как ускорить парсинг с помощью Beautiful Soup в 5 раз
Table Of Content
- BEAUTIFUL SOUP
- Используйте эти 3 простых метода, чтобы ускорить парсинг с использованием beautiful soup
- Зачем это полезно и важно?
- 1. Повторное использование сессий (и их поддержка в активном состоянии) вместо создания нового запроса для каждой страницы.
- 2. Используйте `lxml` в качестве базового парсера вместо стандартного HTML парсера.
- 3. Установка библиотеки cchardet
- Дополнительные ссылки:
- Beautiful Soup 4 опубликован через PyPi, поэтому если вы не можете установить его с помощью системного пакетного менеджера, вы можете установить его...
BEAUTIFUL SOUP
Используйте эти 3 простых метода, чтобы ускорить парсинг с использованием beautiful soup
Зачем это полезно и важно?
В большинстве случаев, когда вы парсите сайт для извлечения общедоступных данных для ваших проектов по анализу данных, вы выполняете это в цикле (иногда это означает выполнение несколько тысяч раз), и каждую секунду, которую вы экономите в своем цикле, это значительно сокращает общее время выполнения.
Примечание: Разница наиболее заметна, если сервер находится в географически удаленной стране (или, другими словами, вы находитесь далеко от сервера, и задержка интернета является большим фактором во времени выполнения).
1. Повторное использование сессий (и их поддержка в активном состоянии) вместо создания нового запроса для каждой страницы.
По умолчанию, если вы не используете сессию, при каждом вызове объекта request
создается новый запрос к серверу, что вызывает значительные задержки при установлении соединения. Вместо этого создайте сессию один раз и поддерживайте ее в активном состоянии до завершения цикла.
Вот разница в коде:
Традиционный код
import requests
url_ = <some_url_you_give>
response_object = requests.get(url_)
soup = BeautifulSoup(response_object.text, 'html.parser')
Код, использующий объект сессии
import requests
url_ = <some_url_you_give>
session_object = requests.Session()
page_obj = session_object.get(url_)
soup = BeautifulSoup(response_obj.text, 'html.parser')
Если вам нужно снова обратиться к URL-адресу в том же домене, вы можете повторно использовать объект сессии напрямую. Это НЕ создаст новую последовательность соединения между вашим скриптом и сервером - и сэкономит время.
2. Используйте lxml
в качестве базового парсера вместо стандартного HTML парсера.
lxml
работает быстрее, чем парсеры html.parser
или html5lib
.
Это потому, что парсер lxml
, который вы будете использовать в Beautiful Soup, написан на языке C (использует библиотеку C libxml2
), в то время как html.parser
написан на языке Python.
Примечание: lxml
должен быть установлен перед использованием. В зависимости от среды, вы можете использовать один из следующих методов для установки lxml
, если он еще не установлен.
$ apt-get install python-lxml
( для Linux )$ easy_install lxml
( используя easy-install )$ pip install lxml
( если вы используете традиционный установщик pip )
Исходный код
soup = BeautifulSoup(response_object.text, 'html.parser')
Исходный код с использованием lxml
soup = BeautifulSoup(response_object.text, 'lxml')
3. Установка библиотеки cchardet
Определение кодировки, используемой в веб-документе, занимает некоторое время (особенно если это большой документ). Вместе с lxml
библиотека cchardet позволяет значительно ускорить определение используемой кодировки в документе.
pip install cchardet import cchardet
Дополнительные ссылки:
Улучшение производительности - из официальной документации Beautiful Soup.
‘https://beautiful-soup-4.readthedocs.io/en/latest/#improving-performance’
Документация Beautiful Soup - Beautiful Soup 4.4.0 documentation
Beautiful Soup 4 опубликован через PyPi, поэтому если вы не можете установить его с помощью системного пакетного менеджера, вы можете установить его...
beautiful-soup-4.readthedocs.io