Как программно измерить размеры элементов в исходном коде HTML с помощью python?

Я делаю анализ макета веб-страницы в python. Фундаментальная задача-программно измерить размеры элементов, заданных исходными кодами HTML, чтобы мы могли получить статистические данные о соотношении контента/объявления, позиции рекламного блока, размере рекламного блока для корпуса веб-страницы.

очевидным подходом является использование атрибутов width/height, но они не всегда доступны. Кроме того, такие вещи, как width: 50% необходимо рассчитать после загрузки в DOM. Поэтому я думаю, что загрузка исходного кода HTML в окно-размер-предопределенный-браузер (например,механизировать хотя я не уверен, что размер окна может быть установлен) - хороший способ попробовать, но mechanize все равно не поддерживает возврат размера элемента.

есть ли универсальный способ (без атрибутов width/height) сделать это в python, предпочтительно с некоторой библиотекой?

спасибо!

2 ответов


Я предлагаю вам взглянуть на дух - webkit веб-клиент, написанный на python. Он имеет поддержку JavaScript, поэтому вы можете легко вызвать функции JavaScript и получить его возвращаемое значение. Пример показывает, как узнать ширину текстового поля google:

>>> from ghost import Ghost
>>> ghost = Ghost()
>>> ghost.open('https://google.lt')
>>> width, resources = ghost.evaluate("document.getElementById('gbqfq').offsetWidth;")
>>> width
541.0  # google text box width 541px

чтобы правильно получить все окончательные размеры, вам нужно отобразить содержимое, принимая во внимание все таблицы стилей CSS и, возможно, весь javascript. Поэтому единственный способ получить размеры из программы Python-это иметь полную реализацию веб-браузера в Python, использовать библиотеку, которая может это сделать, или удаленно пилотировать браузер вне процесса.

более поздний подход можно сделать с использованием инструментов Selenium-проверьте, как вы можете получить результат выражений javascript из Программы на Python здесь: может ли веб-драйвер Selenium иметь доступ к глобальным переменным javascript?