Написал свой первый граббер...

12
A
На сайте с 06.11.2010
Offline
128
1910

Решил попрактиковаться.

Подопытный - это мой сайт

Решил с простенького: со всех страниц моего сайта спарсить название страниц(то, что между тегом h1, он у меня один на странице)

Все старницы взял с sitemap.xml

ну и каждую страницу загонял в переменную функцией file_get_contents и потом регуляркой брал, то что мне надо.

в итоге получилось вот такое чудо - сам граббер (где-то минуту-две парсит данные)

и сам код граббера


<?php

echo "
<style>
h1{font-size: 16px;}
table{
padding: 0!important;
font-size: 12px;
color: #6E9F17;
border-collapse: collapse;
}
td{
padding: 5px;
border: 2px solid #e5e5e5;
}
tr:hover{background-color: #efefef;}
</style>\n
";
$contents = file_get_contents('http://www.gistoryja.ru/sitemap.xml');

preg_match_all("/[<][l][o][c][>].*.[<][\/][l][o][c][>]/",$contents, $c);

$i = count($c[0])-1;


while ($i != 0)
{
$c[0][$i] = strip_tags($c[0][$i]);
$contents = file_get_contents($c[0][$i]);
preg_match("/[<][h][1][>].*.[<][\/][h][1][>]/",$contents, $array);
$i2 = 0;
$array2[] = $array[$i2];
$i2++;
$i--;
}

echo '<table width="100%">';
foreach ($array2 as $item)
{
echo "<tr>";
echo '<td>' . $item . '</td>';
echo "</tr>";
}

echo '</table>';

У меня вопрос: чего он так долго парсит? Можно как-нибудь увеличить скорость работы парсера?

Я примерно правильно всё сделал или есть способы парсинга получше?

LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#1

Это зависит от вашего провайдера и провайдера сервера.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#2

Попробуйте залить парсер на свой сайт, и тогда заработает быстрей:)

Леонид правильно Вам сказал, все дело в соединении(скорость). Пока скрипт зачитает файл, пока регуляркой пройдется(по всему файлу!) и т.д. К тому же для ПХП регулярки это ресурсоемкий процесс. Насколько знаю, ПЁРЛ с регэкспами более дружен и работает намного быстрей. Если есть потребность в парсинге чего-то емкого - юзайте ПЁРЛ.

Подпись))
A
На сайте с 06.11.2010
Offline
128
#3

есть всякие веб-сервисы которые чекают позиции сайта.

Они же сами инфу не придумывают, а парсят данные с выдачи ПС, так же?

Почему они быстро работают? Почти моментально вроде как.

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#4

Наверное всякие яндексы имеют деньги на норм выделенный канал, и возможно чекеры имеют норм канал. Попробуйте сами с яндекса спарсить первые 10 тайтлов сайтов, которые в выдачу попадают и посмотрите.

siv1987
На сайте с 02.04.2009
Offline
427
#5
/[<][l][o][c][>].*.[<][\/][l][o][c][>]/

Лол.

/<loc>(.+?)<\/loc>/

A
На сайте с 06.11.2010
Offline
128
#6

Милованов Ю.С, попробую)

siv1987, когда-то читал про эти регулярки, но всё забылось. Надо опять будет почитать.

siv1987
На сайте с 02.04.2009
Offline
427
#7
siv1987, когда-то читал про эти регулярки, но всё забылось. Надо опять будет почитать.

Да вам бы не только про регулярки почитать, не мешало бы еще и про foreach, можно вдвое сократить этот г-код.

ArtBlogger
На сайте с 21.07.2010
Offline
88
#8

file_get_contents вне зависимости от скорости соединения работает очень долго, советую для начала присмотреться к curl, а затем можно и multicurl попробовать. Я обычно пишу парсеры так: получаю страницу через функцию curl, через регулярку собираю все ссылки на статьи, передаю массив ссылок в multicurl, получаю массив результатов, экспортирую его на нужный сайт и перехожу к следующей странице. В multicurl указываю количество потоков равное количеству ссылок на странице. Получается самый оптимальный вариант парсинга по скорости.

A
На сайте с 06.11.2010
Offline
128
#9

ArtBlogger, спасибо, почитаю про этот curl

---------- Добавлено 22.07.2012 в 23:45 ----------

А можно сделать граббер, который авторизируется на каком-нибудь сайте и потом уже делает свои дела...

или который может отпралять POST запросы...? :)

LEOnidUKG
На сайте с 25.11.2006
Offline
1727
#10
А можно сделать граббер, который авторизируется на каком-нибудь сайте и потом уже делает свои дела...

Вот как раз CURL это и умеет.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий