За последние 24 часа нас посетили 115138 программистов и 6457 роботов. Сейчас ищут 1437 программистов ...

phpQuery: выборка элементов

Тема в разделе "PHP для новичков", создана пользователем data_gate(), 27 ноя 2016.

Метки:
  1. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    всем привет, подскажите по phpquery:
    PHP:
    1. require("phpquery.php");
    2. $c = "<body><p>pppp</p><div>dddd<a>aaaa</a></div></body";
    3. = phpQuery::newDocument($c);
    1 как мне получить название корневого элемента ( "body" )
    2 как мне получить список детей элемента "body" DOM-а $c? ("ррр" и "dddaaa")
    3 как мне получить список всех элементов "body" ? ("ррр", "dddааа" , "ааа")
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    что это?
    --- Добавлено ---
    название в каком смысле? что за корневой элемент?
     
    data_gate() нравится это.
  3. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    "корневой элемент" - это "body" - элемент у которого нет родителей.
    "название" - что за бред, это имя, конечно же ) имя элемента. название тэга. класс, любой уникальный идентификатор который можно прочитать сейчас и к которому можно будет обратится потом...
    PHP:
    1. $a = $c -> find("body")
    как оказалось, такого элемента как "body" в DOM-е нет ...
    а ответ на 3-й вопрос выглядит вот так:
    PHP:
    1. $c=$c->find(":next");
    2. foreach($c as $child)
    3. {
    4.    echo "<br>-".pq($child);  
    5. }
    только я не понимаю почему ...
     
  4. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    "название" - что за бред, это имя, конечно же ) имя элемента. название тэга ("p", "div", "a" ...). класс, любой уникальный идентификатор который можно прочитать сейчас и к которому можно будет обратится потом...

    на JQuery это выглядит так:
    Код (Javascript):
    1. this.name
    2. $(this).attr("name")
    я это перевожу на phpQuery так:
    PHP:
    1. pq($child) -> attr("name")
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    но у body родитель html
    css селектор? прочитай про них или xpath
     
    data_gate() и Deonis нравится это.
  6. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    для моих задач можно сказать что интересуют дети body )

    вот я нашел как получить список детей (в моем примере это параграф и див)
    PHP:
    1. $cl = pq($c) -> children();
    у меня вопрос в том, как узнать "к чему" обращаться, а не "как".
    в моем примере, вопрос в том, как узнать "что" я получил (параграф или див ...)

    PHP:
    1. require("phpquery.php");
    2. $c = "<body><p>pppp</p><div>dddd<a>aaaa</a></div></body";
    3. = phpQuery::newDocument($c);
    4. $cl = pq($c) -> children();
    5. foreach($cl as $c)
    6. {
    7. #вот тут я хочу понять что такое $c - параграф или див,
    8. #какие у него есть атрибуты
    9. #и как к нему можно обращаться
    10. #используя цивилизованные способы вроде методов
    11. #а не пещерным способом через strcmp()
    12. }
     
    #6 data_gate(), 28 ноя 2016
    Последнее редактирование: 28 ноя 2016
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    data_gate() нравится это.
  8. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    тоесть мне нужно, кроме require("phpquery.php"), еще эти две штуки подключить ?
    Код (Text):
    1. require_once "< YOUR PREFERRED LOCATION >/classes/autoload.php";
    2. use com\soloproyectos\common\dom\node\DomNode;
    (да на каком это вообще языке ?? )
    для того, что-бы я мог написать
    Код (Text):
    1. $c="<body><div>d-1</div><div>d-2<div>d-2-1</div><div>d-2-2<div>d-2-2-1</div></div></div><div>d-3</div></body>";
    2. $c = phpQuery::newDocument($c);
    3. echo DomNode::name($c);
    ???
    что ты такое, phpQuery ?
    я правильно понимаю, domnode это опциональная часть phpQuery ??
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    По ходу мне попалась более новая версия библиотеки.... В любом случае, найдите доки по той, что вы используете
     
  10. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    дак в этом и грабли - есть только https://code.google.com/archive/p/phpquery/ и ссылки на jquery .... а мне нужно из jquery "this.name" получить аналог phpquery.
    хотя скорее всего "более новая версия библиотеки" это аналог ПНХ, но я не злюсь ...
     
  11. data_gate()

    data_gate() Новичок

    С нами с:
    27 ноя 2016
    Сообщения:
    7
    Симпатии:
    0
    PHP:
    1. #получаем имена тэгов элементов верхнего уровня
    2. require("phpquery.php");
    3. $c = "<body><p>pppp</p><div>dddd<a>aaaa</a></div></body";
    4. $c = phpQuery::newDocument($c);
    5. $c = $c -> children();
    6. foreach($c as $cc) printf("%s<BR>", $cc -> tagName);
    7.  
    8. #еще можно так:
    9. echo $c->elements[0]->tagName;
    10.  
    11. #получено при помощи бубна (echo var_dump($c); )
    12. #и шаманских плясок (исходный код страницы)
    благодарю @denis01 и @mkramer за наставления
     
  12. OrionNk

    OrionNk Новичок

    С нами с:
    25 апр 2018
    Сообщения:
    4
    Симпатии:
    0
    Люди помогите и подскажите как у эмекса спарсить цену товара и сроки. https://www.emex.ru/f?detailNum=7522&makeId=1389
    Я в браузере теги страницы вижу все а phpquery видит только шапку и фут страницы
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @OrionNk обсуждать парсинг запрещено правилами ресурса
     
  14. OrionNk

    OrionNk Новичок

    С нами с:
    25 апр 2018
    Сообщения:
    4
    Симпатии:
    0
    Сорян. Не внимателен.