PHP, парсинг HTML. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir  
PHP, парсинг HTML.
Radiance Дата: Воскресенье, 06.04.2014, 10:49 | Сообщение # 1
Боец
Сообщений: 209
Статус: Offline
Итак, немного не то, что обещал в прошлый раз, но фиг с ним.
В общем, немного парсинга и ещё кой чего по мелочи, ибо одним этим не обойдёмся.
Передо мной встала задача - накрутить счётчик скачек на одном сайте.
Соответственно нам надо - получить код страницы, спарсить его до определенного дива, в котором лежит ссылка на скачку, начать загрузку с последующей переименовкой объекта, и при том пропустить это всё через прокси.
Итак, начнём, для начала - создадим массив с прокси:
Код

$proxy = array_rand(   //выбираем рандомную проксю из массива, массив начинается со скобки, ес чё.
       '213.129.110.38:8080',
       '109.172.56.147:8080',
       '193.232.184.141:8080',
       '176.194.189.56:8080',
       '77.50.220.92:8080',
       '145.255.4.150:8080');
//P.S - эти прокси не валид, подставляем свои.


Дальше нам нужно собсна собрать цикл, который будет выполнять скачку Н-ное кол-во раз:
Код

$i = 0;
while ($i < 20) { //Цикл выполняется до тех пор, пока $i меньше 20
$i = $i + 1; // Увеличение переменной $i на 1, сокращенная запись $i++
// Здесь будут последующие куски скрипта
// И здесь, возможно, то же.
}

Обратим внимание, что цикл формируется следующим образом
Условие цикла - фигурная скобка - действие - конец цикла.
Действие цикла помещается в фигурные скобки { }

Теперь мы должны получить страничку, для последующего парсинга. Тут есть два варианта - через библиотеку CURL, либо стандартный file_get_contents
Т.к. нам нужно работать с проксями, в этом случае CURL будет удобнее:
Код

// массив с прокси
// условие цикла
// вообще весь последующий кусок и есть действие, выполняемое в цикле.
$url = 'урл_на_страницу_скачки';  
$curl = curl_init();  // открываем соединение, далее задаем параметры.
curl_setopt($curl, CURLOPT_URL, $url);  // ссылка на скрипт-страницу-или еще что из переменной $url
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  // явно обозначаем, что нам нужен ответ
curl_setopt($curl, CURLOPT_REFERER, "http://cheat-master.ru");  // задаём реферер, т.е. "сайт", откуда мы пришли, в данном примере указан наш же СМ  
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208'); // указываем юзерагент, типо "браузер" кароч
curl_setopt($curl, CURLOPT_PROXY, "$proxy"); // прокси
$r=curl_exec($curl); // выполняем запрос
curl_close($curl); // закрываем соединение
} // закрываем цикл.



В итоге, совместив всё, мы получим полную HTML страницу, с которой пойдёт закачка, что не моветон, ибо, во первых - нам нужно, что бы счётчики засчитали наш псевдоприход, во вторых - вытащить из этой страницы ссылку из какого то элемента - дива или ещё чего.
Значит, нам нужно полученную страницу парсить до этого самого места, ведь приход наш уже засчитан. но не засчитана скачка. Далее мы решим всё это очень простым образом.
Для этого уже имеется куча библиотек, классов и прочего прочего прочего, так что мастерить велосипед нам не придётся.
Т.е. - дальнейшая задача, стоящая перед нами - из уже загруженной страницы вытащить ДИВ с ссылкой, из ссылки вытащить урл на скачку, и начать закачивать файл.
Теперь представим, у нас есть DIV с именем info и в нём лежит нужная нам ссылочка.
Код

$page = $r; // $r - уже полученная нами страница ранее.
$link = preg_match("/<div.*id=\"info\".*><a.*href=>(.*)<\/a><\/div>/",$page,$match);


Всё, ура, получили нужную нам ссылочку. теперь можно продолжить работу с ней, и так:
Код

// тут нам всё уже знакомо
$curlobj = curl_init();  
curl_setopt($curlobj, CURLOPT_URL, $link);  
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curlobj, CURLOPT_REFERER, "http://cheat-master.ru");
curl_setopt($curlobj, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
curl_setopt($curlobj, CURLOPT_PROXY, "$proxy"); // прокси
$r=curl_exec($curlobj);  
curl_close($curlobj);  


В итоге, у нас уже есть готовый даунлоадер для скачки откуда-то там чего-то там, при том, что мы явно обозначаем своё присутствие, соответственно счётчики считают нас живыми человеками, а мы всего лишь злобный скрипт.
По идее можно всё сократить до безобразия - обернуть запрос в функцию и вызывать её с разными переменными в ссылках, более удобно оформить парсинг через какие нибудь библиотеки и тд и тп, я дал вам лишь минимум пищи для размышления. Даже самый криворукий криворук уловив суть сможет довести весь этот быдлокод до нужного для себя идеала юзая гугл.
Ах, да, кое где намерено допущены ошибки, это таск вам - заюзать отладчики и найти.
Спасибо за внимание



Радик камбек :D

Radiance Дата: Понедельник, 07.04.2014, 05:07 | Сообщение # 2
Боец
Сообщений: 209
Статус: Offline
Ещё решил чуть чуть добавить, точнее, разъяснить, ибо посмотрев свежим взглядом понял, что не все моменты вам будут понятны,и из-за одного случая скрипт будет не рабочим (если собирать его по кускам с темы).
Во первых, у меня здесь прокси выбираются рандомно - нужно поочерёдно для каждого круга цикла по одной проксе, иначе сгенерированная для айпишника ссылка будет не действительна для другого айпи.
При парсинге строки до ДИВа здесь мы используем стандартную регулярку строки.
Дабы не было конфликтов во втором запросе нужно выносить разные переменные ответа, в первом случае пусть $r, втором - любая на ваше пожелание.



Радик камбек :D

  • Страница 1 из 1
  • 1
Поиск: