PDA

View Full Version : استخراج داده های یک جدول در وب



reza_web
دوشنبه 22 خرداد 1396, 12:34 عصر
سلام
من می خواهم از لینک زیر جدول قابل استفاده در برنامه نویسی استخراج کنم

http://offlinecourse.iaun.ac.ir/ShowList.php?Code=99604

راحتترین راهش کپی در اکسل است ولی به علت داشتن تگ <BR> در ستون زمان تشکیل کلاس عملا هر رکورد در هر سطر اکسل قرار نمیگیره
آیا میشه با php یا هر چیز دیگه ای سریع و دقیق این اطلاعات را تبدیل به جدول کرد
(متاسفانه دانشگاه ها همکاری نمی کنند که خروجی مناسب بهم بدهند)

aalmair
دوشنبه 22 خرداد 1396, 17:59 عصر
<?php



function atrributes_str($str='',$start_index=0,&$attributes_str_res=''){

//start index must be ' ' or >'>'
$div_sign_end_tag=0;
$attributes_str_res='';
$attributes_str='';
$i=$start_index;
$end_of_attribute=$i;
$article=$str;
$size_article=strlen($str) ;

$attributes=array();

$end_of_tag=0;

if($i>=$size_article){
return $i;
}



if(!(ord($article[$i])<=32||$article[$i]=='>')){
return $i;
}



while($i<$size_article){
if($article[$i]==">"){
//$i++;
$attributes_str_res=$attributes_str;
return $i;

break;
}elseif($i+1<=$size_article&&$article[$i]=='/'&&$article[$i+1]=='>'){

$i++;
$attributes_str_res=$attributes_str.' /';
return $i;
}

if($article[$i]=='=' &&ord($article[$i-1])>32){
$j=$i-1;
$k=$j;

while($j>=0){
if((($j-1)>=0&&ord($article[$j-1])<=32)||($j-1)<=$end_of_attribute){
break;
}
$j--;
}

if(isset($attribute_name)){
unset($attribute_name);
}

if($j<$k){

$attribute_name=substr($article,$j,$k-$j+1);
}elseif($j==$k){
$attribute_name=$article[$j];
}






$i++;
while($i<$size_article&&ord($article[$i])<=32){
$i++;
}





$attribute_value='';

if($article[$i]=="'"){
$i++;
while($i<$size_article){
if($article[$i]=="'"){
$end_of_attribute=$i;
break;
}
$attribute_value.=$article[$i];
$i++;
}

}elseif($article[$i]=='"'){
$i++;
while($i<$size_article){
if($article[$i]=='"'){
$end_of_attribute=$i;
break;
}
$attribute_value.=$article[$i];
$i++;
}

}else{

while($i<$size_article&&ord($article[$i])<=32){

$i++;

}

while($i<$size_article&&ord($article[$i])>32){

if($article[$i]=='>'){

$end_of_tag=1;
break;
}elseif($i+1<=$size_article&&$article[$i]=='/'&&$article[$i+1]=='>'){
$i++;
$div_sign_end_tag=1;
$end_of_tag=1;
break;
}elseif($article[$i]=='<'){
$attribute_value.=$this->less_sign_equal;
$i++ ;
}else{
$attribute_value.=$article[$i];
$i++;
}



}

}

if(isset($attribute_name)&&$attribute_name){
$attribute_name=strtolower($attribute_name);


$attribute_name_exist=0;
for($t=0;$t<count($attributes);$t+=2){
if($attributes[$t]==$attribute_name){
$attribute_name_exist=1;
break;
}
}

if($attribute_name_exist==0){
$attributes[]=$attribute_name;
$attributes[]=$attribute_value;

$disallowd_attri=0;



$attributes_str.=' ';
for($c=0;$c<strlen($attribute_name);$C++‎){
if($attribute_name[$c]=='<'){
$attributes_str.='&lt;';
}else{
$attributes_str.=$attribute_name[$c];
}
}
$attributes_str.='="'.$attribute_value.'"';


}
unset($attribute_name);

}

}
if($end_of_tag){
break;
}

$i++;

}
if($div_sign_end_tag){
$attributes_str.=' /';
}
$attributes_str_res=$attributes_str;
return $i;

}
function array_2_csv($array) {
$res = '';
foreach ($array as $item)
{
$res .= implode( ',',$item);
$res .= "<br>" ;
}
return $res ;
}




$str = file_get_contents('http://offlinecourse.iaun.ac.ir/ShowList.php?Code=99604') ;
$size = strlen($str);
$index= 0;

$csv = array() ;
$tr_index= 0;






do
{
$find_index_tr_start = strpos($str,'<tr',$index) ;




if($find_index_tr_start !==false)
{
$index = $find_index_tr_start ;



$find_index_tr_end = strpos($str,'</tr',$index) ;



do
{
$find_index_td_start = strpos($str,'<td',$index) ;

if($find_index_td_start !== false && $find_index_td_start < $find_index_tr_end)
{

$index = $find_index_td_start ;
$find_index_td_end = strpos($str,'</td',$index) ;

$index = atrributes_str($str,$index) ;


$td_data = substr($str,$find_index_td_start,$find_index_td_en d-$find_index_td_start) ;
$td_data = strip_tags($td_data) ;
$td_data = html_entity_decode($td_data,ENT_QUOTES,'utf-8') ;
$td_data = str_replace(',',"\,",$td_data) ;

$csv [$tr_index][] = $td_data ;





if($find_index_td_end !== false)
{
$index = $find_index_td_end -1 ;
}





}



}while($find_index_td_start !== false && $find_index_td_start < $find_index_tr_end) ;




$tr_index ++ ;



}






}while($find_index_tr_start !== false) ;







header("Content-Type: text/html; charset=utf-8");

$csv_data = array_2_csv($csv);

echo $csv_data;











کد رو اجرا کن بعد خروجی رو داخل یک فایل که به صورت utf-8 ذخیره شده قرار بده145478

reza_web
سه شنبه 23 خرداد 1396, 08:16 صبح
ممنون از شما
فقط این خطا را میده
Parse error: in C:\wamp64\www\exportclasses.php on line 160

البته متغیر C بزرگ بود که کوچکش کردم ولی این خطا را متوجه نمیشوم

فکر کنم دو خط 152 و 153 هم مشکل داشته باشد

aalmair
سه شنبه 23 خرداد 1396, 10:05 صبح
متاسفانه ویرایش گر مشکل داره سورس کد رو براتون اضافه کردم



145479

reza_web
چهارشنبه 24 خرداد 1396, 13:29 عصر
دست شما درد نکنه

یه سوال دیگه:
برخی دانشگاهها مانند کرج:
http://edu.kiau.ac.ir/list_mehman/list_ara.aspx

لیست دروس ارائه شده بوسیله انتخاب کومبوباکس و بصورت اجکسی نمایش داده میشود من چطوری می توانم مسیر آنرا به کدم بدهم و لازم نباشه خودم با کومبو انتخاب کنم و خروجی را در فایل html ذخیره و مسیر فایل را به کدم بدهم؟؟ اخه اینطوری خیلی زمانبر می شود
آیا می شود خروجی یه اجکس را در php بدست آورد (همانند یک URL معمولی)