помогите разобратся с парсингом
помогите разобратся с парсингом
вот огрызок кода со страницы
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561256 ">Sev1234</a>
и таких много
мне нужно собрать айди которое часть ссылки выделеная зеленым перейти на некст страницу и повторить чтоб в итоге получилась база с которой можно работать для дальнейшей россылки
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561256 ">Sev1234</a>
и таких много
мне нужно собрать айди которое часть ссылки выделеная зеленым перейти на некст страницу и повторить чтоб в итоге получилась база с которой можно работать для дальнейшей россылки
Re: помогите разобратся с парсингом
Например так:
// navigate $browser->navigate("file://D:/1.html"); // получить DIV $elDIV = $div->get_by_attribute("class","nick", false); // получить вложенный в него A $elA=$elDIV->get_child_by_number(0); // получить href echo $href=$elA->get_href(); echo "\n"; // получим id $index1=strpos($href,"/id"); echo $id=substr($href,$index1+3);D:\1.html:
<div class="nick"> <a class="bx-def-font-large" href="http://www.ляляляля/id1561256 ">Sev1234</a>
Re: помогите разобратся с парсингом
работает но собирает айди только первого пользывателя на странице а нужно всех 10
D:\1.html:
и так 10 раз...
а с вашим примером на выходе получаем только id1561256
собственно вопрос как собрать все id на странице:?:
D:\1.html:
Код: Выделить всё
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561256 ">Sev1236</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561257 ">Sev1237</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561258 ">Sev1238</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561259 ">Sev1239</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.ляляляля/id1561260 ">Sev1240</a>
а с вашим примером на выходе получаем только id1561256
собственно вопрос как собрать все id на странице:?:
Re: помогите разобратся с парсингом
А может быть попробовать так:
$text = $webpage->get_body_inter_prefix_all('<div class="nick">','</a>',$as_html=false,$shift1=56,$shift2=-10,$separator="<br>");
//с переменными shift1 и shift2 надо поиграть
$arr[0] = explode("<br>", $text);
//при переходе на следующую страницу создать массив $arr[1], затем $arr[2] и т.д. А потом массивы объединить.
$text = $webpage->get_body_inter_prefix_all('<div class="nick">','</a>',$as_html=false,$shift1=56,$shift2=-10,$separator="<br>");
//с переменными shift1 и shift2 надо поиграть
$arr[0] = explode("<br>", $text);
//при переходе на следующую страницу создать массив $arr[1], затем $arr[2] и т.д. А потом массивы объединить.
- XwebDeveloper
- Сообщения: 51
- Зарегистрирован: 13 ноя 2017, 12:53
Re: помогите разобратся с парсингом
Можно сделать следующим образом.
HTML адаптировал для отладки кода:
Сам код:
HTML адаптировал для отладки кода:
Код: Выделить всё
<div class="nick">
<a class="bx-def-font-large" href="http://www.site.com/id1561256 ">Sev1236</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.site.com/id1561257 ">Sev1237</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.site.com/id1561258 ">Sev1238</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.site.com/id1561259 ">Sev1239</a>
<div class="nick">
<a class="bx-def-font-large" href="http://www.site.com/id1561260 ">Sev1240</a>
// массив для id $arr_id = array(); // получить все ссылки по части href $arr_href=$anchor->get_all_by_href("/id"); // покажем массив в панели отладки print_r($arr_href->get_href()); // пройдёмся по массиву и заменим лишнее foreach($arr_href->get_href() as $href) { $href = str_replace("http://www.site.com/","",$href); echo $href."<br>"; // добавляем id в массив $arr_id[]=$href; } // вывод в панель отладки print_r($arr_id);Результат работы в окне отладки:
Array ( [0] => http://www.site.com/id1561256 [1] => http://www.site.com/id1561257 [2] => http://www.site.com/id1561258 [3] => http://www.site.com/id1561259 [4] => http://www.site.com/id1561260 ) id1561256 id1561257 id1561258 id1561259 id1561260 Array ( [0] => id1561256 [1] => id1561257 [2] => id1561258 [3] => id1561259 [4] => id1561260 )
Запрос на создание скриптов viewforum.php?f=61
Re: помогите разобратся с парсингом
вот это работает как нужно
только теперь проблема с самим строением сайта
на 1 странице не 10 пользывателей как я думал а 20-30
потому что на странице вверху есть что то типо топа пользывателей и их айди тоже собирает и ещё где то берет часть я так и не смог пока понять где
и не имею не малейшей догадки как их отсеять ведь с точки зрения кода это такие же айди
разве что как то сделать сбор без повторений чтоб в списке не было двух одинаковых айди такое возможно
или же когда перейду ко второй часте тобишь спаму сделать как то спам был без повторений
ну саму суть как работает парсинг я понял спасибо
только теперь проблема с самим строением сайта
на 1 странице не 10 пользывателей как я думал а 20-30
потому что на странице вверху есть что то типо топа пользывателей и их айди тоже собирает и ещё где то берет часть я так и не смог пока понять где
и не имею не малейшей догадки как их отсеять ведь с точки зрения кода это такие же айди
разве что как то сделать сбор без повторений чтоб в списке не было двух одинаковых айди такое возможно
или же когда перейду ко второй часте тобишь спаму сделать как то спам был без повторений
ну саму суть как работает парсинг я понял спасибо
- XwebDeveloper
- Сообщения: 51
- Зарегистрирован: 13 ноя 2017, 12:53
Re: помогите разобратся с парсингом
Не добавлять дубликаты в массив с id:
// массив для id $arr_id = array(); // получить все ссылки по части href $arr_href=$anchor->get_all_by_href("/id"); // покажем массив в панели отладки print_r($arr_href->get_href()); // пройдёмся по массиву и заменим лишнее foreach($arr_href->get_href() as $href) { $href = str_replace("http://www.site.com/","",$href); echo $href."<br>"; // добавляем id в массив если такого нет if (!in_array($href, $arr_id)) { $arr_id[]=$href; } } print_r($arr_id);Или можно собирать ссылки не по href а скажем по классу
// массив для id $arr_id = array(); // получить все ссылки по атрибуту class $arr_href=$anchor->get_all_by_attribute("class","bx-def-font-large"); // покажем массив в панели отладки print_r($arr_href->get_href()); // пройдёмся по массиву и заменим лишнее foreach($arr_href->get_href() as $href) { $href = str_replace("http://www.site.com/","",$href); echo $href."<br>"; // добавляем id в массив если такого нет if (!in_array($href, $arr_id)) { $arr_id[]=$href; } } print_r($arr_id);
Запрос на создание скриптов viewforum.php?f=61
Re: помогите разобратся с парсингом
теперь работает вопросов ещё очень много но на сегодня хватит ибо если ты за меня всё напишешь будет круто но так мало чему научусь сам
попробую сделать сам после вернусь со списком того что не получилось
попробую сделать сам после вернусь со списком того что не получилось
Re: помогите разобратся с парсингом
проблема раз
[21] => id1563531
[22] => m/photos/albums/browse/owner/id1563531
[23] => id1563528
[24] => id1563527
[25] => m/photos/albums/browse/owner/id1563527
[26] => id1173615
[27] => m/photos/albums/browse/owner/id1563402
[28] => id1563363
[29] => id1563354
это лишнее в масиве с айди можно убрать как то?
вопрос двас
насколько убого это выглядит по шкале от 1 до пиз**ц
ну и так 15 раз повторется
я вроде как где то видел что можно сделать всё проще но забыл как ну впринцыпе уже и так работает но на будущее хотелось бы знать как избегать таких Ctrl+c Ctrl+v
[21] => id1563531
[22] => m/photos/albums/browse/owner/id1563531
[23] => id1563528
[24] => id1563527
[25] => m/photos/albums/browse/owner/id1563527
[26] => id1173615
[27] => m/photos/albums/browse/owner/id1563402
[28] => id1563363
[29] => id1563354
это лишнее в масиве с айди можно убрать как то?
вопрос двас
насколько убого это выглядит по шкале от 1 до пиз**ц
Код: Выделить всё
$browser->enable_popup(false)." ";
$browser->is_enable_popup()."\n";
// массив для id
$arr_id = array();
// получить все ссылки по части href
$arr_href=$anchor->get_all_by_href("/id");
// пройдёмся по массиву и заменим лишнее
foreach($arr_href->get_href() as $href)
{
$href = str_replace("http://www.site.com/","",$href);
// echo $href."<br>";
// добавляем id в массив если такого нет
if (!in_array($href, $arr_id))
{ $arr_id[]=$href; }
}
$anchor->click_by_href("page=2", false);
$arr_href=$anchor->get_all_by_href("/id");
foreach($arr_href->get_href() as $href)
{
$href = str_replace("http://www.site.com/","",$href);
// echo $href."<br>";
if (!in_array($href, $arr_id))
{ $arr_id[]=$href; }
}
$anchor->click_by_href("page=3", false);
$arr_href=$anchor->get_all_by_href("/id");
foreach($arr_href->get_href() as $href)
{
$href = str_replace("http://www.site.com/","",$href);
// echo $href."<br>";
if (!in_array($href, $arr_id))
{ $arr_id[]=$href; }
}
я вроде как где то видел что можно сделать всё проще но забыл как ну впринцыпе уже и так работает но на будущее хотелось бы знать как избегать таких Ctrl+c Ctrl+v
- XwebDeveloper
- Сообщения: 51
- Зарегистрирован: 13 ноя 2017, 12:53
Re: помогите разобратся с парсингом
Для того что бы не добавлять лишнее можно добавить следующий код перед заполнением массива:
Первый вариант оптимизируем повторяющиеся переходы по страницам не трогая первый переход. Это делается с помощью цикла и у нас получится следующий код:
Второй вариант переделаем весь код в один цикл, который будет работать пока у нас есть страницы с href=page№:
// не добавлять в массив строки m/photos/albums/browse/owner/id1563402 if(strpos($href,'albums')!==false) continue;Теперь про оптимизацию кода.
Первый вариант оптимизируем повторяющиеся переходы по страницам не трогая первый переход. Это делается с помощью цикла и у нас получится следующий код:
// пройдёмся по массиву и заменим лишнее foreach($arr_href->get_href() as $href) { $href = str_replace("http://www.site.com/","",$href); // echo $href."<br>"; // не добавлять в массив строки m/photos/albums/browse/owner/id1563402 if(strpos($href,'albums')!==false) continue; // добавляем id в массив если такого нет if (!in_array($href, $arr_id)) { $arr_id[]=$href; } } // цикл прохода по страницам for($ii=2; $ii<15; $ii++) { $anchor->click_by_href("page=".$ii, false); $arr_href=$anchor->get_all_by_href("/id"); foreach($arr_href->get_href() as $href) { // не добавлять в массив строки m/photos/albums/browse/owner/id1563402 if(strpos($href,'albums')!==false) continue; $href = str_replace("http://www.site.com/","",$href); // echo $href."<br>"; if (!in_array($href, $arr_id)) { $arr_id[]=$href; } } }
Второй вариант переделаем весь код в один цикл, который будет работать пока у нас есть страницы с href=page№:
$browser->enable_popup(false)." "; $browser->is_enable_popup()."\n"; // массив для id $arr_id = array(); // получить все ссылки по части href $arr_href=$anchor->get_all_by_href("/id"); // счётчик для страниц $ii=2; while(true) { // пройдёмся по массиву и заменим лишнее foreach($arr_href->get_href() as $href) { $href = str_replace("http://www.site.com/","",$href); // echo $href."<br>"; // не добавлять в массив строки m/photos/albums/browse/owner/id1563402 if(strpos($href,'albums')!==false) continue; // добавляем id в массив если такого нет if (!in_array($href, $arr_id)) { $arr_id[]=$href; } } // переходим на следующую страницу если есть такая if($anchor->is_exist_by_href("page=".$ii, false)) { $anchor->click_by_href("page=".$ii, false); sleep(1); // получаем массив $arr_href=$anchor->get_all_by_href("/id"); $ii++; } else // страницы нет прекращаем работу break; }
Запрос на создание скриптов viewforum.php?f=61
Re: помогите разобратся с парсингом
последний вопрос по этой теме ..ну надеюсь)
мой косяк я сразу не глянул что для спама нужны айди без приписки id
нужно оставить только цыфры
[13] => id1564618
[14] => id1564617
[15] => id1564614
единственные 3 строчки написаные мной в этом скрипте
ещё хотелось бы ускорить работу скрипта ибо от настроения сайта сбор может занять как 20 секунд так и несколько минут хотя сомневаюсь что можно как то ускорить загрузку сайта)
мой косяк я сразу не глянул что для спама нужны айди без приписки id
нужно оставить только цыфры
[13] => id1564618
[14] => id1564617
[15] => id1564614
Код: Выделить всё
for($ID=1;$ID<999; $ID++)
{
$browser->navigate("http://www.site.com/chat/$arr_id[$ID]");
$textarea->set_value_by_attribute("id", "aqb_simple_chat_message_text", false, "привет");
$btn->click_by_inner_text("Отправить (Enter)", false);
}
ещё хотелось бы ускорить работу скрипта ибо от настроения сайта сбор может занять как 20 секунд так и несколько минут хотя сомневаюсь что можно как то ускорить загрузку сайта)
- XwebDeveloper
- Сообщения: 51
- Зарегистрирован: 13 ноя 2017, 12:53
Re: помогите разобратся с парсингом
Перед тем как использовать просто добавьте замену id.
for($ID=1;$ID<999; $ID++) { // убрать id $id_new = str_replace("id","",$arr_id[$ID]); $browser->navigate("http://www.site.com/chat/$id_new"); $textarea->set_value_by_attribute("id", "aqb_simple_chat_message_text", false, "привет"); $btn->click_by_inner_text("Отправить (Enter)", false); }
Запрос на создание скриптов viewforum.php?f=61