View Full Version : استخراج داده های یک جدول در وب
reza_web
دوشنبه 22 خرداد 1396, 13:34 عصر
سلام
من می خواهم از لینک زیر جدول قابل استفاده در برنامه نویسی استخراج کنم
http://offlinecourse.iaun.ac.ir/ShowList.php?Code=99604
راحتترین راهش کپی در اکسل است ولی به علت داشتن تگ <BR> در ستون زمان تشکیل کلاس عملا هر رکورد در هر سطر اکسل قرار نمیگیره
آیا میشه با php یا هر چیز دیگه ای سریع و دقیق این اطلاعات را تبدیل به جدول کرد
(متاسفانه دانشگاه ها همکاری نمی کنند که خروجی مناسب بهم بدهند)
aalmair
دوشنبه 22 خرداد 1396, 18: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.='<';
}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, 09:16 صبح
ممنون از شما
فقط این خطا را میده
Parse error: in C:\wamp64\www\exportclasses.php on line 160
البته متغیر C بزرگ بود که کوچکش کردم ولی این خطا را متوجه نمیشوم
فکر کنم دو خط 152 و 153 هم مشکل داشته باشد
aalmair
سه شنبه 23 خرداد 1396, 11:05 صبح
متاسفانه ویرایش گر مشکل داره سورس کد رو براتون اضافه کردم
145479
reza_web
چهارشنبه 24 خرداد 1396, 14:29 عصر
دست شما درد نکنه
یه سوال دیگه:
برخی دانشگاهها مانند کرج:
http://edu.kiau.ac.ir/list_mehman/list_ara.aspx
لیست دروس ارائه شده بوسیله انتخاب کومبوباکس و بصورت اجکسی نمایش داده میشود من چطوری می توانم مسیر آنرا به کدم بدهم و لازم نباشه خودم با کومبو انتخاب کنم و خروجی را در فایل html ذخیره و مسیر فایل را به کدم بدهم؟؟ اخه اینطوری خیلی زمانبر می شود
آیا می شود خروجی یه اجکس را در php بدست آورد (همانند یک URL معمولی)
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.