Работа с BeautifulSoup4
Установка
|
|
Сравнение парсеров
Beautiful Soup поддерживает HTML-парсер, включенный в стандартную библиотеку Python, но также поддерживает ряд сторонних парсеров:
html.parser
- стандартный питоновский парсер. Нестрогий, имеет приемлемую скорость, но не такой быстрый, какlxml
и более строгий, чемhtml5lib
.- HTML-парсер в
lxml
- очень быстрый, нестрогий, но имеющий внешнюю зависимость отC
- XML-парсер в
lxml
- eдинственный поддерживаемый XML-парсер. Очень быстрый, но имеет внешнюю зависимость отC
html5lib
- разбирает страницы так же, как это делает браузер. Создает валидный HTML5. Очень нестрогий, очень медленный и имеет внешнюю зависимость от Python
|
|
Making the soup
Чтобы распарсить документ, нужно передать в конструктор BeautifulSoup строку. Этой строкой и будет полученный html.
|
|
page.text
- возвращает HTML-содержимое объекта ответа в Unicode.
page.content
- возвращает содержимое ответа в байтах.
page.headers.get("content-type", "unknown")
- можно проверить какой тип контента вернулся.
Виды объектов
Beautiful Soup превращает сложный HTML-документ в сложное дерево объектов Python. Однако нам придется иметь дело только с четырьмя видами объектов: Tag
, NavigableString
, BeautifulSoup
и Comment
.
Errors
- InsecureRequestWarning: Unverified HTTPS request is being made to host xxx Подробное решение тут
|
|
- TypeError: object of type ‘Response’ has no len()
Скорее всего в качестве первого параметра в BS4 передана не строка, а что-то другое. Убедитесь, что передаете не response
, а response.text
.
- Error: HTTPSConnectionPool(host=‘some_host’, port=443): Max retries exceeded with url: /some/path/ (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)’)))
В этом случае нужно либо отключить проверку SSL-сертификата (плохое решение)
|
|
Либо (что гораздо лучше) создать сессиию и примонтировать адаптер:
|
|
Если у вас Mac и python
установлен через brew
, то ошибка может возникать из-за того, что по какой-то причине brew
не запустил команду Install_Certificates.command
, которая поставляется в пакете Python3
для Mac. Решение тут
Последний вариант: чтобы использовать непроверенный ssl
, вы можете добавить это в свой код:
|
|