примеры парсинга

вопросы связанные с работой версии с Chromium
Ответить
E=mc2
Сообщения: 124
Зарегистрирован: 16 май 2014, 00:57

примеры парсинга

Сообщение E=mc2 » 16 июн 2018, 12:55

Код: Выделить всё

div class=hub
	div class=a
		table
			tr
				td
				td
	div class=a
		table
			tr
				td
				td
				td
	div class=b
		table
			tr
				td
				td
				td
			tr
				td
				td
	div class=a
		table
			tr
				td
				td
нужно получить содержимое некоторых TD в DIV'ах класса А.
Выбираю все DIV'ы класса А: foreach ($div->get_all_numbers_by_attribute("class", "a", true) as $nn)
Хочу получить все номера TD в конкретном DIV'e: $div->get_numbers_child_by_number($nn, "td")
Ничего не отдаёт.
Что делаю не так? Как будет правильно?

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: примеры парсинга

Сообщение Support » 16 июн 2018, 19:09

Попробуйте понять срабатывает ли вообще функция $div->get_all_numbers_by_attribute("class", "a", true).

Можно сделать вывод массива. Если всё хорошо то переделать так скрипт что бы получать массив до того как его использовать.

При такой конструкции вы каждый раз получаете массив заново.
foreach ($div->get_all_numbers_by_attribute("class", "a", true) as $nn)


Лучше сделать следующим образом:

$arr_div = $div->get_all_numbers_by_attribute("class", "a", true);
print_r($arr_div); // проверить получили или нет

foreach ($arr_div as $nn)
{
    $arr_num = $div->get_numbers_child_by_number($nn, "td");
    print_r($arr_num); // проверить что получили
}

E=mc2
Сообщения: 124
Зарегистрирован: 16 май 2014, 00:57

Re: примеры парсинга

Сообщение E=mc2 » 16 июн 2018, 23:37

Support писал(а):
16 июн 2018, 19:09
Попробуйте понять срабатывает ли вообще функция $div->get_all_numbers_by_attribute("class", "a", true)
С этим всё в порядке, получаю массив номеров.
Ничего не отдает вот это: $div->get_numbers_child_by_number(3711, "") Указание td или tr, переход на element вместо div никак не влияет.

Ещё наблюдение. $mouse->move_to($x, $y, "curve", 1000);
Живёт своей жизнью :D Время 1000 видимо условная величина. Время перемещения иногда увеличиваться в разы. Пока не до того, но если эти фокусы будут по ходу работы скрипта накапливаться, то будет скучно.

Аватара пользователя
xscripts
Сообщения: 80
Зарегистрирован: 24 янв 2012, 12:48
Контактная информация:

Re: примеры парсинга

Сообщение xscripts » 17 июн 2018, 00:59

http://humanemulator.net/objects/DOM/a_ ... number.php

Если ты сразу пытаешься получить это дело как массив то это не верно. И саппорт походу тоже ошибся, либо описание устарело. В доке написано вот что
После отработки функция возвращает результат своей работы в скрипт :
номера элементов – строка с номерами дочерних элементов, разделенных <br> (или пустая строка, если элемент не содержит дочерних элементов), тип возвращаемого значения string
То есть в скрипте это должно быть так:

$str_td= $div->get_numbers_child_by_number($nn, "td");

$arr_num = explode('<br>',$str_td);

// проверить что получили
print_r($arr_num); 

К сожалению, с подобными функциями, которые возвращают несколько элементов надо перепроверять. Так первые функции, которые были добавлены изначально они возвращали именно строку разделённую либо <br> либо \n. В последствии перешли в подобных функциях на формат возврата в виде массива. НО старые функции для совместимости со скриптами оставили. Вот и получается что они переползи аж в Studio, так как Студию объявили полностью совместимой с предыдущим версиями. Лично мне кажется, что надо ввести один стандарт и возвращать во всех подобных случаях массив. Думаю что народ не сильно затруднит немного подправить скрипты.
Ещё наблюдение. $mouse->move_to($x, $y, "curve", 1000);
Живёт своей жизнью :D Время 1000 видимо условная величина. Время перемещения иногда увеличиваться в разы. Пока не до того, но если эти фокусы будут по ходу работы скрипта накапливаться, то будет скучно.
Попробуйте поиграться с 1000 и подобрать время оптимально для себя.
http://x-scripts.com/

Код: Выделить всё

<?php
$xhe_host ="127.0.0.1:7010";

require("../Templates/xweb_human_emulator.php");

$browser->navigate("http://x-scripts.com");

$app->quit();?>

E=mc2
Сообщения: 124
Зарегистрирован: 16 май 2014, 00:57

Re: примеры парсинга

Сообщение E=mc2 » 17 июн 2018, 09:07

xscripts писал(а):
17 июн 2018, 00:59
Попробуйте поиграться с 1000 и подобрать время оптимально для себя.
Это я уже делал. Хотел "размягчить" - rand(10,15)*100 Любое отклонение от цифры 1000 приводило к "хаотичным" (субъективно, т.к. не замерял) интервалам до 10 секунд. Оставил пока как есть. Но вынужден буду к этому вернуться. :(

С приколом "строка вместо массива" я знаком. Столкнулся эмпирически. Но тут беда в том, что $element->get_numbers_child_by_number($nmr, "") не отдает вообще ничего.

Аватара пользователя
Support
Site Admin
Сообщения: 1000
Зарегистрирован: 10 апр 2009, 17:45
Контактная информация:

Re: примеры парсинга

Сообщение Support » 17 июн 2018, 10:56

E=mc2 писал(а):
17 июн 2018, 09:07
xscripts писал(а):
17 июн 2018, 00:59
Попробуйте поиграться с 1000 и подобрать время оптимально для себя.
Это я уже делал. Хотел "размягчить" - rand(10,15)*100 Любое отклонение от цифры 1000 приводило к "хаотичным" (субъективно, т.к. не замерял) интервалам до 10 секунд. Оставил пока как есть. Но вынужден буду к этому вернуться. :(

С приколом "строка вместо массива" я знаком. Столкнулся эмпирически. Но тут беда в том, что $element->get_numbers_child_by_number($nmr, "") не отдает вообще ничего.
Функцию get_numbers_child_by_number проверим если не работает исправим. По поводу $mouse->move_to при создании функции делался упор на рандомность, видимо где то сбоит алгоритм. Не могли бы вы прислать на почту саппорта как вы работаете с функцией, какие типы вызываете, как часто она вызывается в скрипте, сколько работает скрипт, после чего вызываете и т.д. что бы мы могли ещё раз протестировать это дело у себя максимально приближённо к вашим условиям.

amaduha
Сообщения: 7
Зарегистрирован: 12 мар 2015, 13:34

Re: примеры парсинга

Сообщение amaduha » 03 ноя 2018, 14:18

по поводу get_child_by_attribute
она не удобно работает.. они ищет только по первому вложению.. а удобней чтоб искала сразу на все дочерние вложения. просто если на сайте вложений 5.. то это куча кода который надо писать чтоб добраться куда надо

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3047
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: примеры парсинга

Сообщение bigfozzy » 04 ноя 2018, 04:36

Добавлен параметр include_subchilderen, будет доступен со следующим обновлением + сделаны рабочими функции get_numbers_child_by_xxx

E=mc2
Сообщения: 124
Зарегистрирован: 16 май 2014, 00:57

Re: примеры парсинга

Сообщение E=mc2 » 05 ноя 2018, 13:09

хорошая новость!

Ответить