Есть ли способ сделать это с помощью BeautifulSoup или regex ?
Да и нет, но это, вероятно, больше работы, чем ее ценность, и не пуленепробиваемая , поэтому я склоняюсь к нет. Если вы используете только beautifulsoup
и хотите знать, какие стили применяются к элементу, как если бы вы использовали браузер, тогда это сложно.
Вам нужно добавить в микс некоторые другие инструменты, такие как безголовый браузер.
Сохранение настроек
HTML + CSS
Во-первых, немного фона.
HTML
- это сам документ , тот, который содержит информацию, которую можно анализировать и преобразовывать. И это то, что у вас есть в вашей программе.
CSS
- это просто что-то, созданное для браузеров и для людей. Его цель - сделать документ красивее, понятнее и проще в использовании. Чтобы получить более широкое представление о том, как CSS
используется браузером, посмотрите эту Как работает CSS
статья MDN . Это означает, что стили загружаются отдельно и применяются «во время выполнения» в браузере. Также существует по крайней мере три различных способа указать стили для элемента (отдельные документы, встроенный и т. Д. c).
парсинг
Я полагаю, вы используете что-то вроде requests
для загрузки страницу, затем отправьте ее на beautifulsoup
, а затем выберите оттуда любые данные, которые вам нужны. Чтобы использовать эту диаграмму из статьи, у вас есть первые три поля из верхнего ряда, то есть без загрузки или анализа CSS
и без отображения страницы.
Это также относится к любым манипуляциям с DOM это происходит в браузере после загрузки страницы, например, контент, загружаемый динамически через вызовы API, или любой JS
, который изменяет страницу - вы не сможете поймать их в конвейере requests
- beautifulsoup
.
Итак, из коробки, похоже, нет способа получить элемент с помощью bs
и запросить, какие стили к нему применены, потому что это не его область действия. Что вы можете сделать, так это получить стиль отдельно и разобраться в нем самостоятельно.
DIY
Во-первых, вы можете получить атрибут style
элемента (td['style']
) и проанализируйте это для шрифтов. Обратите внимание, что есть несколько способов указать это, например, font: italic 1.2em "Fira Sans", serif;
, font: small-caps bold 24px/1 sans-serif;
, font-family: 'Fira Sans', serif; font-size: 1.2em;
. Но тогда есть также каскадная часть CSS
, что означает, что родительский элемент может применять стили к своим дочерним элементам.
Затем в документе есть теги <style>
, а также <link rel="stylesheet">
.
Дело в том, что это работа, выполняемая браузером (и к тому же сложная задача!), Вы бы частично копировали ее, и есть другие вещи, которые вы могли бы использовать.
Headless browser
У этой работы есть имя, и вот оно. Это означает, что это реализация браузера без фактического GUI, которую вы можете использовать программно через API. Это делает его отличным, например, для тестирования веб-сайтов, а также для очистки страниц с динамическим c контентом или для которых вам нужна информация о стиле.
Я не могу рекомендовать их, так как сам не использовал их , но этого должно быть достаточно, чтобы вы начали.