К сожалению нет, не возможно с BeautifulSoup в одиночку ,
Проблема в том, что BS4 не является полным веб-браузером. Это только парсер HTML. Он не анализирует CSS, ни Javascript.
Полный веб-браузер делает по крайней мере четыре вещи:
- Подключение к веб-серверам, распаковывает данные
- Анализирует HTML содержание и CSS форматирование и представляет веб-страницу
содержание
- Анализирует Javascript, запускает его ,
- Обеспечивает взаимодействие пользователя для таких вещей, как навигации браузера, HTML-форм и с событиями API для программы Javascript
Все еще не уверен? Теперь посмотрите на свой код. BS4 даже не включает в себя первый шаг, выборку веб-страницы, чтобы сделать это, вам нужно было использовать urllib2
.
Динамические сайты обычно включают Javascript для запуска в браузере и периодического обновления содержимого. BS4 не предоставляет этого, и поэтому вы их не увидите, а тем более никогда не будете использовать только BS4. Зачем? Поскольку пункт (3) выше, загрузка и выполнение программы Javascript не происходит. Это будет происходить в IE, Firefox или Chrome, и именно поэтому они работают, чтобы показать динамический контент, в то время как BS4-only scraping не показывает его.
PhantomJS и CasperJS предоставляют более механизированный браузер, который часто может запускать коды JavaScript, позволяющие динамически создавать веб-сайты. Но CasperJS и PhantomJS запрограммированы на серверном Javascript, а не на Python.
По-видимому, некоторые люди using a browser built into PyQt4 for these kinds of dynamic screenscaping tasks, изолируя часть DOM и отправляя это BS4 для синтаксического анализа. Это может привести к решению Python.
В комментариях @Cyphase предлагает, чтобы точные данные, которые вы хотите, могли быть доступны с другим URL-адресом, в этом случае он может быть извлечен и проанализирован с помощью urllib2/BS4. Это может быть определено путем тщательного изучения Javascript, который работает на сайте, в частности, вы можете искать setTimeout
и setInterval
, который планирует обновления, или ajax
, или функцию .load
jQuery для извлечения данных с задней стороны. Javascripts для обновлений динамического содержимого будет обычно только извлекать данные из внутренних URL-адресов одного и того же веб-сайта. Если они используют jQuery $('#frequenz')
относится к div, и, ища это в JS, вы можете найти код, который обновляет div. Без jQuery обновление JS, вероятно, будет использовать document.getElementById('frequenz')
.
«Как я могу оценить значение переменной tempsensor на python?» - Я не вижу никакой переменной ... – alfasin
Каков фактический URL? –
фактический URL-адрес http://www.netzfrequenz.info/charts/regelleistung –