Расхождение между конструктором действий в режиме regexp и поиском регуляркой по page.source

  • Автор темы Автор темы konfuciy
  • Дата начала Дата начала

konfuciy

Client
Регистрация
07.05.2014
Сообщения
1 402
Реакции
131
Баллы
63
вводим, например, такой урл:
http://www.rusarticles.com/find-articles.php?q=мужская+одежда+опт
в конструкторе действий задаем элемент
№документа
0
№формы
-1
Тэг
a
Имя аттрибута
href
Значение
http://www\.rusarticles\.com/find-articles\.php\?q=.*&page=
Тип поиска
regexp

Находится четыре элемента от 0 до 3 включительно


Если же мы попробуем через Обработка текста/regexp поискать этой же самой регуляркой
http://www\.rusarticles\.com/find-articles\.php\?q=.*&page=
мы найдем 0 совпадений.

При нажатии на Исследование элемента можно увидеть, что на самом деле окончание должно быть не
&page=
а
&page=

Таким образом, конструктор действий не соответствует в этой части Регуляркам поиска в Обработка текста/regexp и не соответствует Исследованию элемента
 
Конструктор действий работает с DOM, а не с Source кодом страницы.
 
а это где-нибудь написано в документации или мануалах? это же совсем не очевидно...

Как же не очевидно?
У Вас загружается страница, получается уже не исходный, а DOM текст - т.е. исходный код + выполненные скрипты, подгруженный контент и т.д.
Конструктор действий с чем по Вашему работает? Вы же ищете элементы на текущей странице, которая уже обработана, загружена и ждёт Ваших дальнейших действий.
 
Как же не очевидно?
У Вас загружается страница, получается уже не исходный, а DOM текст - т.е. исходный код + выполненные скрипты, подгруженный контент и т.д.
Конструктор действий с чем по Вашему работает? Вы же ищете элементы на текущей странице, которая уже обработана, загружена и ждёт Ваших дальнейших действий.
Не очевидно потому что на версиях 5.7, 5.8 не возникало у меня такой проблемы. Скорее всего я просто мало его использовал, оттого и не столкнулся, а в тех случаях когда использовал сорс соответствовал в нужных частях дому. Спасибо за разъяснение.
 
Перенес из Багов в Вопросы
 
Конструктор действий работает с DOM, а не с Source кодом страницы.
Перенес из Багов в Вопросы

вот другой пример

страница
http://pisali.ru/search/
ввожу для примера форму поиска слово "напитки"
конструктором действий выбираю элемент - цифра перехода на следующую страницу. в конструкторе имею:
0
-1
a
href
http://pisali\.ru/search/\#
regexp

Конструктор находит два совпадения 0 и 1

формулу регэкспа конструктор подставил сам.

Далее копирую эту формулу http://pisali\.ru/search/\#
вставляю в Обработка текста/Regex, искать по Page.Dom - согласно вашему пояснению (между делом вручную смотрю, Page.Dom НЕ содержит того, что показал конструктор действий)

Не находит ни одного совпадения.

Поясните, пожалуйста, в чем проблема?
 
Эта ссылка генерится... в DOM'е её нет, там код, который её генерит. Если нужно парсить ссылки со страницы, забудьте о конструкторе. Выделите ссылку в браузере и выберите Исследовать элемент в контекстном меню. Посмотрите в каком виде ссылка прописана там. Затем найдите её в DOM-е.
 
Эта ссылка генерится... в DOM'е её нет, там код, который её генерит. Если нужно парсить ссылки со страницы, забудьте о конструкторе. Выделите ссылку в браузере и выберите Исследовать элемент в контекстном меню. Посмотрите в каком виде ссылка прописана там. Затем найдите её в DOM-е.
Теперь я вообще не могу ничего понять)) подскажите тогда, откуда конструктор действий берет эту ссылку?
Ранее вы писали, что он берет все из дом, это неверно, некоторые элемнты конструктор берет ещё откуда-то?
Как понять - эта ссылка генериться? Её нет ни в сорс, ни в дом, так?
Но это же не соответствует действительности, я смотрел дом - ссылка там есть, просто в дом по ссылке вместо двоеточия идёт что-то вроде ℅13e - это представление в аск-2 или ещё какой-то другой кодировке.
И в сорсе ссылка тоже есть, тоже выглядит с небольшим отличием
 
DOM код же все равно интерпретируется конструктором. Он не будет выдавать точно так как написано в коде. В конструкторе будет отражаться самый конечный результат, который будет после интепретации кода. Вы слишком зациклились на конструкторе действий. Работайте с DOM кодом, там ссылка может быть представлена по другому. Конструктор не для парсинга, он для создания действий.
 
  • Оценить
Реакции: konfuciy
DOM код же все равно интерпретируется конструктором. Он не будет выдавать точно так как написано в коде. В конструкторе будет отражаться самый конечный результат, который будет после интепретации кода. Вы слишком зациклились на конструкторе действий. Работайте с DOM кодом, там ссылка может быть представлена по другому. Конструктор не для парсинга, он для создания действий.
понятно, спасибо
 
понятно, спасибо
Сначала браузер делает GET запрос и получает HTML страницу с сервера (source код), затем эта страница "исполняется" - то есть срабатывают JavaScript скрипты, применяются CSS стили, отрисовываются все элементы (таблицы, шрифты и.т.д.), этим занимается браузер (инстанс) и так получается уже изменённая страница - DOM код, конструктор действий работает с DOM моделью, но сама DOM модель имеет определённый синтаксис, например & в ссылках всегда пишется как & поэтому если вас интересует поиск ссылок именно в том виде в котором вы их видете - то это вам позволит сделать конструктор действий, а в "сыром" (изменённом) виде вы можете их вытащить через DOM код.
 
Сначала браузер делает GET запрос и получает HTML страницу с сервера (source код), затем эта страница "исполняется" - то есть срабатывают JavaScript скрипты, применяются CSS стили, отрисовываются все элементы (таблицы, шрифты и.т.д.), этим занимается браузер (инстанс) и так получается уже изменённая страница - DOM код, конструктор действий работает с DOM моделью, но сама DOM модель имеет определённый синтаксис, например & в ссылках всегда пишется как & поэтому если вас интересует поиск ссылок именно в том виде в котором вы их видете - то это вам позволит сделать конструктор действий, а в "сыром" (изменённом) виде вы можете их вытащить через DOM код.
Спасибо за разъяснения, но они не совсем верны, как я выяснил практическим путем, о чем выше и написал - поиск конструктором не соответствует поиску по dom и те регулярки, которые предлагает конструктор, в dom ничего не находят в приведенных случаях.
Из всего этого очевидно, что поиск конструктора - это НЕ поиск по dom, а поиск по какой-то ещё своей модели, происхождение которой мне из разъяснений непонятно.
 
Вам уже выше написали что для составления регулярок используйте конструктор регулярок с DOM, а не конструктор экшенов.
 
Вам уже выше написали что для составления регулярок используйте конструктор регулярок с DOM, а не конструктор экшенов.
а причем это, я не разу не возразил против того. использую.
я говорю об очевидном противоречии - с одной стороны мне пишут, что конструктор ищет по dom, а я на практике установил, что по dom формулы конструктора нужное не находят в описанных мной примерах. и тогда появляется какой-то еще третий непонятный вид страницы - и не dom и не source, а специальный для конструктора. я не специалист и меня это сильно путает.
что это за вид я понять не могу, а меня это интересует, не с практической точки зрения, а с точки зрения понимания логики программы.
и по моим наблюдениям, до версий серии 5.9. не было такого третьего вида кода страницы, у меня формулы конструктора работали в регэксе, но я могу ошибаться....
 
Последнее редактирование:
Ссылки в DOM тексте могут быть относительными (по отношению к домену).
В общем DOM тексте href этой ссылки выглядит как #
Так как этот атрибут сайтом совсем не используется, ссылка вызывает работу скрипта, который уже перелистывает страницы. При этом при получении атрибута href этой ссылки (то чем занимается конструктор) из DOM модели, резолвится полный путь (убирается относительность по отношению к домену), который при желании уже можно использовать.
Если вам нужен парсинг данных - вы подбираете регулярку по общему DOM тексту, если нужно понять атрибуты для поиска элемента - то смотрите в конструкторе действий.
 
Ссылки в DOM тексте могут быть относительными (по отношению к домену).
В общем DOM тексте href этой ссылки выглядит как #
Так как этот атрибут сайтом совсем не используется, ссылка вызывает работу скрипта, который уже перелистывает страницы. При этом при получении атрибута href этой ссылки (то чем занимается конструктор) из DOM модели, резолвится полный путь (убирается относительность по отношению к домену), который при желании уже можно использовать.
Если вам нужен парсинг данных - вы подбираете регулярку по общему DOM тексту, если нужно понять атрибуты для поиска элемента - то смотрите в конструкторе действий.
я правильно понял, что конструктор еще "дорабатывает" dom модель под себя?
 
Это браузер.
Для примера Вам - можете взять эту же ветку форума и посмотреть ссылку, которая находится под Вашим ответом.
Вы увидите http://zennolab.com/discussion/thre...reguljarkoj-po-page-source.23162/#post-157306
но в ДОМе такой ссылки не будет. Там будет только /discussion/threads/rasxozhdenie-mezhdu-konstruktorom-dejstvij-v-rezhime-regexp-i-poiskom-reguljarkoj-po-page-source.23162/#post-157306
т.е. относительная ссылка (без домена)
 
  • Оценить
Реакции: konfuciy
Это браузер.
Для примера Вам - можете взять эту же ветку форума и посмотреть ссылку, которая находится под Вашим ответом.
Вы увидите http://zennolab.com/discussion/thre...reguljarkoj-po-page-source.23162/#post-157306
но в ДОМе такой ссылки не будет. Там будет только /discussion/threads/rasxozhdenie-mezhdu-konstruktorom-dejstvij-v-rezhime-regexp-i-poiskom-reguljarkoj-po-page-source.23162/#post-157306
т.е. относительная ссылка (без домена)
спасибо большое
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)