PHP/MySQL | Парсер информации с сайта
В связи с открытым доступом к данным на сайте bymas.ru у меня возникла идея:
Внимание! Данная тема не является каким-то запрещенным хаком или взломам сайта. Еще раз повторю, все файлы были в открытом доступе и имели прямой контакт с клиентом без определенных привилегий.
Код программы:
<?php
ini_set("max_execution_time", "1200");
function cod(){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: No-Cache, Must-Revalidate");
header("Pragma: No-Cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Content-Type: TEXT/HTML; CharSet=UTF-8");
}
function folder($dir){
if(!is_dir($dir))
mkdir($dir, 0700);
}
$url = "http://bymas.ru/download";
$dir = $_SERVER["DOCUMENT_ROOT"]."/bymas_download/"; // куда сохранять файлы и папки
folder($dir);
$count = 10;
$id = (isset($_GET["start"])) ? (int) $_GET["start"] : 7835;
$max_id = 75327;
if($max_id<$id) $id=$max_id;
cod();
print("<a href=\"/index.php?start=".($id+$count)."\">Next<a/><br />");
for($i=$id;$i<($id+$count);$i++){
$html = file_get_contents($url."s/view/".$i);
if(!preg_match("/Файл не найден/isU",$html)){
preg_match_all("/<b>Реальное имя<\/b>: (.*)<br \/>/isU",$html,$name);
$name = $name[1][0];
if(preg_match("/Описание:/isU",$html)){
preg_match_all("/<b>Описание:<\/b>(.*)<b>Реальное имя<\/b>/isU",$html,$info);
$info = $info[1][0];
}
preg_match_all("/<a href=\"\/downloads\/(.*)\">(.*)<\/a>/isU",$html,$dir2);
folder($dir.$dir2[1][0]);
if(!is_file($dir.$dir2[1][0]."/$name")){
$file = file_get_contents($url."_file/".$i);
$fp = fopen($dir.$dir2[1][0]."/$name", "a");
fwrite($fp, $file);
fclose($fp);
if($info){
$fp = fopen($dir.$dir2[1][0]."/".$name.".txt", "a");
fwrite($fp, $info);
fclose($fp);
}
}
print("$i yes<br/>");
}else print("$i not<br/>");
}
print_r("Good hack");
if($max_id>$id) print("<meta http-equiv=\"refresh\" content=\"3; url=/index.php?start=".($id+$count)."\">");
?>
Зачем постоянно кликать по ссылкам, чтобы скачать информацию. Проще написать скрипт, который сам сделает за меня эту работу. Потратив на это примерно около часу был написан следующий скрипт, который сливл мне всю информацию и раскладывал по папкам.
Внимание! Данная тема не является каким-то запрещенным хаком или взломам сайта. Еще раз повторю, все файлы были в открытом доступе и имели прямой контакт с клиентом без определенных привилегий.
Код программы:
<?php
ini_set("max_execution_time", "1200");
function cod(){
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: No-Cache, Must-Revalidate");
header("Pragma: No-Cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
header("Content-Type: TEXT/HTML; CharSet=UTF-8");
}
function folder($dir){
if(!is_dir($dir))
mkdir($dir, 0700);
}
$url = "http://bymas.ru/download";
$dir = $_SERVER["DOCUMENT_ROOT"]."/bymas_download/"; // куда сохранять файлы и папки
folder($dir);
$count = 10;
$id = (isset($_GET["start"])) ? (int) $_GET["start"] : 7835;
$max_id = 75327;
if($max_id<$id) $id=$max_id;
cod();
print("<a href=\"/index.php?start=".($id+$count)."\">Next<a/><br />");
for($i=$id;$i<($id+$count);$i++){
$html = file_get_contents($url."s/view/".$i);
if(!preg_match("/Файл не найден/isU",$html)){
preg_match_all("/<b>Реальное имя<\/b>: (.*)<br \/>/isU",$html,$name);
$name = $name[1][0];
if(preg_match("/Описание:/isU",$html)){
preg_match_all("/<b>Описание:<\/b>(.*)<b>Реальное имя<\/b>/isU",$html,$info);
$info = $info[1][0];
}
preg_match_all("/<a href=\"\/downloads\/(.*)\">(.*)<\/a>/isU",$html,$dir2);
folder($dir.$dir2[1][0]);
if(!is_file($dir.$dir2[1][0]."/$name")){
$file = file_get_contents($url."_file/".$i);
$fp = fopen($dir.$dir2[1][0]."/$name", "a");
fwrite($fp, $file);
fclose($fp);
if($info){
$fp = fopen($dir.$dir2[1][0]."/".$name.".txt", "a");
fwrite($fp, $info);
fclose($fp);
}
}
print("$i yes<br/>");
}else print("$i not<br/>");
}
print_r("Good hack");
if($max_id>$id) print("<meta http-equiv=\"refresh\" content=\"3; url=/index.php?start=".($id+$count)."\">");
?>
krasnodar23, какую инфу парсит?
Хихикающий доктор, именно файлы и описание к ним. складывает в определенную папку, то есть разбивает по разделам файлы.
krasnodar23, хм, реально парсит)