Вход Регистрация
* HELL

Создание грабера

  1. <?php
  2. /*
  3. *Как написать граббер.
  4. *автор: nc_soft
  5. *28.09.07
  6. */
  7.  
  8. /*
  9. Любой граббер для удобства можно разделить на ТРИ оcновных части-этапа:
  10. -получение
  11. -обработка
  12. -выдача
  13.  
  14. Получение.
  15. Для того, что бы граббер нормально функционировал необходимо написать функцию для получнения
  16. страницы с удаленного хоста по заданному url, надежнее пользоваться сокетами
  17. (потому что библиотека CURL установлена не везде и не всегда, использовать file_get_contents()
  18. и комбинации implode('',file(..)) конечно тоже можно, просто сокет предоставляет побольше возможностей.
  19. Напишем функцию получния страницы по урл.
  20. */
  21.  
  22. function data($path,$host)
  23. {
  24. /*
  25.   $path путь к файлу скрипта, а так же передаваемые параметры
  26.   $host сграббливаемый хост (например, sasisa.ru)
  27.   */
  28. $fp = fsockopen($host, 80);
  29. if (!$fp)
  30. {
  31. die('ошибка');
  32. }
  33. else
  34. {
  35. $out = "GET $path HTTP/1.0\r\n";
  36. $out .= "Accept: image/gif, application/xhtml+xml, */*\r\n";
  37. $out .= "Accept-Language: ru\r\n";
  38. $out .= "Host: $host\r\n";
  39.  
  40. //прикинемся оперой-мини
  41. $out .= "User-Agent: Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n";
  42.  
  43. $out .= "Cache-Control: no-cache\r\n";
  44. $out .= "Connection: Close\r\n\r\n";
  45.  
  46. fwrite($fp, $out);
  47. $headers = "";
  48.  
  49. while ($str = trim(fgets($fp)))
  50. $headers .= "$str\n";
  51.  
  52. $body = "";
  53.  
  54. while (!feof($fp))
  55. $body .= fgets($fp);
  56. fclose($fp);
  57. }
  58. //возвращаем данные
  59. return $body;
  60. }
  61.  
  62. /*
  63. Итак, функция для получения страницы готова, теперь составим функцию для обработки данных, тоесть для
  64. выреза рекламы, подмены ссылок итп
  65. */
  66.  
  67. /*
  68. function process($s)
  69. {
  70. Здесь сложно дать какие-то рекоммендации, все "грабберописание" состоит в основном в
  71. придумывании этой функции, сделаем пока что "заглушку" на этом месте
  72.  
  73. return $s;
  74. }
  75. */
  76.  
  77. /*
  78. Для корректной работы грабба необходимо теперь правильно определять переменную $path, для примера давайте граббить
  79. всем известный http://wen.ru/forum/index.php
  80. пример очень характерный, потому что многие "потенциальные жертвы" грабов (загруз центры например)
  81. состоят как раз из одного файла
  82. */
  83.  
  84. //с хостом определились
  85. $host='wen.ru';
  86.  
  87. if (empty($_SERVER['QUERY_STRING']))
  88. {
  89. //начальная позиция
  90. $path='/forum/index.php';
  91. }
  92. else
  93. {
  94. //новые параметры
  95. $path='/forum/?'.$_SERVER['QUERY_STRING'];
  96. }
  97.  
  98. /*
  99. теперь необходимо зайти на страницу форума и посмотреть ее в коде
  100. видно что ссылки выдаются так
  101. <a href="/forum/?p=1&f=1&w=htm">Общение</a>
  102. для работы грабба достаточно изменить ссылку так
  103. <a href="index.php?p=1&f=1&w=htm">Общение</a>
  104. что и сделаем в функции process
  105. */
  106.  
  107.  
  108. /*function process($s)
  109. {
  110. $s=str_replace('<a href="/forum/','<a href="index.php',$s);
  111. return $s;
  112. }*/
  113.  
  114. //можно в принципе запускать :) (ПЕРВЫЙ ЭТАП)
  115. $s=data($path,$host);
  116.  
  117. //обрабатываем (ВТОРОЙ ЭТАП)
  118. $s=process($s);
  119.  
  120. //выдаем результат (ТРЕТИЙ ЭТАП)
  121. /*
  122. третий этап не так прост как кажется, если вы граббите загрузки, то
  123. необходимо организовать переадресацию на прямую ссылку с контентом
  124. */
  125. header('Content-type:text/html;charset=utf-8');
  126. echo $s;
  127.  
  128. /*
  129. как видим, граббер вполне работает, только не грузятся смайлики,
  130. давайте подкорректируем это и впишем свой копирайт на страницу :)
  131. */
  132.  
  133. function process($s)
  134. {
  135. $s=str_replace('<a href="/forum/','<a href="'.$_SERVER['SCRIPT_NAME'],$s);
  136.  
  137. //смайлы
  138. $s=str_replace('<img src="','<img src="http://wen.ru/',$s);
  139.  
  140. //копирайт
  141. $s=str_replace('</body>','<div>(c)snippets</div></body>',$s);
  142.  
  143. return $s;
  144. }
  145.  
  146. /*
  147. разумеется, вы не сможете написать в тему или создать ее, тут надо использовать
  148. POST запросы, задача этой статьи не создание флудер-скрипта а ознакомление с
  149. принципами написания грабберов.
  150. */
  151.  
  152. ?>
» Описание: Урок создания грабберов.
» Время добавления: 20 Окт 2015 в 14:36
» Посмотров: 1478
» textarea
» Рейтинг: [+0 | -0]
Комментарии [0]
Онлайн: 0
Реклама