Не полностью отображается html-код для со страницы

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Не полностью отображается html-код для со страницы

Сообщение ndemidov » 19.11.2014 (Ср) 18:24

Здравствуйте. Нужно получить html-код для со страницы http://samara.kinomechta.com/

Возникла такая проблема: блок с киносеансами (там где время отображается) - FireBug в FireFox отображаются html-элементы:
Код: Выделить всё
<div class=“wrap-time-button”>
<div class=“schedule-sessions”>
<span class=“expired time”>
10:20
<div class=“info hidden-desktop hidden-tablet”>


А html-кода загружаемый с помощью метода urllib.request.openurl() (язык Python 3), также как и просто просмотр html-кода страницы через браузер не отображает эти “кнопки” с временем сеансов:
Код: Выделить всё
<div class=“wrap-time-button”>
<div class=“schedule-sessions”>

только это выдает. Вопрос - почему не весь html-код отображается?
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 19.11.2014 (Ср) 19:00

Уже получил ответ - если отключить в браузере js, то такой же результат будет. Вопрос: как получить в Python 3 html-код как из браузера с включенным js. Думаю, вреатле подскажут и не в тему, так что сори за беспокойство, тему наверно можно удалить)) :)
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.11.2014 (Ср) 19:05

А селениум можно использовать из питона?

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 19.11.2014 (Ср) 19:12

А что это?)
Я только начал изучать питон
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 19.11.2014 (Ср) 19:27


ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 19.11.2014 (Ср) 19:53

Спасибо))
Уже порыскал - есть примеры использования селениум с Python. И другие сторонние методы видимо тоже есть. Завтра буду думать)

А нет ли Win32 API-функций, которые бы выдавали html-код с загруженными js? Помойму в питоне можно os API использовать
И есть ли какая-либо возможность получить ссылки с js и как-то их "прочитать"?))
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не полностью отображается html-код для со страницы

Сообщение Хакер » 20.11.2014 (Чт) 5:41

ndemidov писал(а):А нет ли Win32 API-функций, которые бы выдавали html-код с загруженными js?

Мечтай.

Причём тут загруженный? Не загруженный, а загруженный и выполненный. И чтобы иметь это, нужно написать свой браузер.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 20.11.2014 (Чт) 13:09

Qwertiy, еще вопрос, этот селениум - он всегда будет открывать страницу в браузере или можно его сделать "невидимым"? аналогично как в VB.NET:
Код: Выделить всё
wbMy = new WebBrowser

и дальше с ним работать

Хакер, понятно :) ...
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.11.2014 (Чт) 13:19

Вероятно, есть способ открыть браузер без видимого окна.
Ещё можно покопать в сторону phantom'а и dalek'а.
Ну и ещё, WebBrowser вроде как является com-объектом, соответственно, его тоже можно использовать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Не полностью отображается html-код для со страницы

Сообщение Хакер » 20.11.2014 (Чт) 13:24

ndemidov писал(а):Qwertiy, еще вопрос, этот селениум - он всегда будет открывать страницу в браузере или можно его сделать "невидимым"? аналогично как в VB.NET:

Есть драйвер, эмулирующий работу абстрактного браузера.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 20.11.2014 (Чт) 14:53

Спасибо. Плохо я во всем этом разбираюсь

С трудом нашел скрипт для установки селениума к Python 3 (офиц. он только на второй идет как я понял).
Не могу найти функцию для получения html-кода страницы из загруженной селениумом страницы. Есть методы title и поиска элементов. А так чтоб весь html-код? разбирается кто в методах селениума?
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 20.11.2014 (Чт) 15:01

Наугад. Найти элемент html и попросить его outerHTML (если есть) или innerHTML. Ну или body.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 21.11.2014 (Пт) 17:30

Ну да, в общем, есть методы у селениума, типо page_source. Или еще варианты:
Код: Выделить всё
    wd = webdriver.Firefox()
    wd.get(url)
    s = wd.find_element(by=By.ID, value="***").get_attribute('innerHTML')
##    s = wd.find_element_by_xpath("//html").get_attribute('innerHTML')

Заранее, извиняюсь, если кто из python-программистов на это наткнется, т.к. я не профессионал, и это все может быть не оптимально.
Вообще с документацией я не разобрался - то ли плохо искал, то ли она плохо сделана...

Хакер, а с этим драйвером (эмулирующим работу абстрактного браузера) можно как-то ознакомиться, чтоб несложно было?))
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 21.11.2014 (Пт) 18:15


iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Не полностью отображается html-код для со страницы

Сообщение iGrok » 24.11.2014 (Пн) 18:56

А что нужно-то? Страница, или всё-таки данные сеансов? Если второе - лучше выяснить, откуда они берутся (а они берутся дёрганьем какого-нибудь апи), и парсить их оттуда.
label:
cli
jmp label

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 25.11.2014 (Вт) 13:46

Нужно данные сеансов представить в виде xml-структуры.
Тут вот мне подсказали, что данные с временем сеансов (которые грузит js) доступны по ссылке http://samara.kinomechta.com/sites/defa ... chedule.js и селениум и phantomjs не нужны для этой задачи. Но я понятия не имею как обработать эти данные по ссылке и как их нашли.

Щас вкуриваю что такое xml и как с ним работать через python
:cyclops:
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.11.2014 (Вт) 13:50

ndemidov писал(а):Но я понятия не имею как обработать эти данные по ссылке

Это JSON (а точнее, JSONP в немного неклассическом варианте) в кодировке UTF-8 (Опера 25 с кодировкой просчиталась).

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 27.11.2014 (Чт) 16:42

JSON - простой формат обмена данными, основанный на подмножестве синтаксиса JavaScript. Модуль json в питоне позволяет кодировать и декодировать данные в удобном формате.
ясн, буду знать что это. Применить щас вреатле смогу.


В общем сделал задание, но есть ряд моментов (косяки это, или просто не оптимально...):
- Для получения html-кода использую селениум. А лучше наверно было бы напрямую загружать данные по файлу js. Также загрузка браузера видна пользователю (PhantmomJS установил, но не работает).
- Разбор страницы сделал вручную (прохожу по html-коду строковыми функциями) - без использования функций поиска по XPath из модулей для таких вещей.
- XML формирую вручную (в строковую переменную). А не с использованием стандартных библиотек.

Так-то понятно описал траблы? Завтра отправлю готовый код с этими пунктами, если норм - возьмут на стажировку. Вообще я ниче не кодил нескл. лет) А до этого немного любительски баловался (заканчивал не на программиста).
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 29.11.2014 (Сб) 2:18

ndemidov писал(а):если норм

А вот это не похоже, судя по твоему описанию. Конечно, в некоторых местах возможны разные мнения, но у тебя вообще пункты один другому противоречат. По-хорошему, надо тащить библиотеку для парсинга xml. Разбирать регулярками и/или строковыми функциями - ну возможно, я бы сказал, что пойдёт, но за такое минус схлопотать запросто, в зависимости от проверяющего. Но у тебя вообще есть целый селениум с браузером (использование которых, кстати, по-прежнему под вопросом), который позволяет вытащить всё необходимое - так зачем городить поверх какой-то кривой велосипед и строковых функций? Ручное формирование xml'я - тоже ооочень жирный вопрос.

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 03.12.2014 (Ср) 16:50

Спасибо:), XML-обработку стандартной библой успел освоить еще до отправки).

Я хотел спросить: когда парсил страницу, то для поиска элемента делал поиск по такой строчке:
Код: Выделить всё
class="views-row views-row-4 views-row-even row">

Щас просматриваю уроки по основам css. Как только услышал, что атрибут class задает название стиля для элемента, я подумал, что потенциально опасно искать элемент методом выше, т.к. название стиля могут поменять. Я так предполагаю за парсинг как я сделал выше должны сильно бить?) :bom:

Надо было по XPath делать?
Код: Выделить всё
.//*[@id='block-system-main']/div/div/div/div[4]
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Не полностью отображается html-код для со страницы

Сообщение iGrok » 04.12.2014 (Чт) 2:18

Вероятность смены класса не сильно выше (но действительно выше) вероятности смены следования элементов самой разметки. Но обе отличны от нуля.

Вообще, если парсится некий сайт, у которого нет задокументированного экспорта данных в каком-либо формате, никогда нет гарантий, что парсинг будет работать всегда.

Так что на мой взляд - допустимое решение. Впрочем, у проверяющих может быть иное мнение.
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.12.2014 (Чт) 19:15

ndemidov писал(а):.//*[@id='block-system-main']/div/div/div/div[4]

Давно я XPath не использовал. Там точно поиска по id нет?
Да и вообще, не уверен, что запрос хороший.
Для html имеет смысл брать id и осмысленные классы.

ndemidov писал(а):т.к. название стиля могут поменять

Скорее порядок классов.
И вообще, row и views-row вряд ли куда-то денутся, а вот views-row-even - скорее всего зависит от чётности строки и нужен для кроссбраузерной зебры.

ndemidov писал(а):XML-обработку

Почему xml, если у тебя html?

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re:

Сообщение ndemidov » 06.12.2014 (Сб) 10:09

Qwertiy писал(а):
ndemidov писал(а):XML-обработку

Почему xml, если у тебя html?

Сори, не написал все задание полностью)
Необходимо информацию о сеансах с сайта http://samara.kinomechta.com/ представить в виде xml-файла со структурой:

Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
   <seances>
   <seance>
      <date>{дата в формате dd-mm-YYYY}</date>
      <time>{время в формате HH:MM}</time>
      <price>{цена, integer}</price>
      <3d>{сеанс в 3d?, boolean(True или False)}</3d>
      <filmname>{название сеанса, строка}</filmname>
      <cinema>{название кинотеатра, строка}</cinema>
   </seance>
   (...)
   </seances>


- Я получаю html-код (с загруженным js) посредством селениум.
- Далее прохожусь по нему своими 2-мя строковыми функциями. И "выцепливаю" информацию о сеансах.
- Формирвоание XML сначала написал полностью вручную: запись в текстовую переменную с угловыми скобками и переводами строки; потом запись в файл. Щас освоил одну из стандартных XML-библ, все это делаю через нее.


Qwertiy писал(а):
ndemidov писал(а):.//*[@id='block-system-main']/div/div/div/div[4]

Давно я XPath не использовал. Там точно поиска по id нет?
Да и вообще, не уверен, что запрос хороший.
Для html имеет смысл брать id и осмысленные классы.

ndemidov писал(а):т.к. название стиля могут поменять

Скорее порядок классов.
И вообще, row и views-row вряд ли куда-то денутся, а вот views-row-even - скорее всего зависит от чётности строки и нужен для кроссбраузерной зебры.


id там нету, только атрибуты class.
Щас хочу уйти от кустарных методов и парсить сайт готовыми решениями от селениум. Разбираюсь с XPath. Найти этот элемент
Код: Выделить всё
<div class="views-row views-row-4 views-row-even row">

можно нескл. способами:
Код: Выделить всё
.//*[@id='block-system-main']/div/div/div/div[4]
.//div[@class="views-row views-row-4 views-row-even row"]


А вообще не знаю, так ли уж плох "кустарный" метод прохода по html, по сравнению с автоматизированными библами. В обоих случаях ищется по имени стиля, или вложенности...
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.12.2014 (Сб) 11:48

ndemidov писал(а):Щас освоил одну из стандартных XML-библ

А сериализации готовой нет в Питоне?

ndemidov
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 14.11.2007 (Ср) 16:23
Откуда: Earth planet

Re: Не полностью отображается html-код для со страницы

Сообщение ndemidov » 06.12.2014 (Сб) 16:23

Ну вот конкретно для XML, то библиотеки могут могут записывать в файл, строку и обратно считывать.
Большинство людей не понимает, что великое многообразие и красочность мира будут служить им крепчайшей душевной поддержкой на протяжении всей жизни. Иван Ефремов


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList  
cron