• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
فراخوانی یک کلمه از یک صفحه html ( کمک )
#1
Question 
سلام .
ببخشید من میخواستم از یک صفحه ی html کلمه ای رو با php فراخوانی کنم که خروجی بهم اونو بده .
اول هم یه چیزی بگم که توی php هیچی سر درنمیارم و لطفا زیر دیپلم کمک کنین مرسی .
کد ها رو برای بات تلگرام نیاز دارم
یعنی از لینک زیر
http://wotlabs.net/eu/player/gladiatorBlack

میخوام مثلا عدد زیر کلمه wn8 رو خروجی بگیرم که نوشته 1059

کد پی‌اچ‌پی:
$html file_get_contents('http://wotlabs.net/eu/player/gladiatorBlack'); //get the html returned from the following url

$pokemon_doc = new DOMDocument();

libxml_use_internal_errors(TRUE); //disable libxml errors

if(!empty($html)){ //if any html is actually returned

    
$pokemon_doc->loadHTML($html);
    
libxml_clear_errors(); //remove errors for yucky html
    
    
$pokemon_xpath = new DOMXPath($pokemon_doc);

    
//get all the h2's with an id
$pokemon_row $pokemon_xpath->query('//*[@id="tankerStats"]/div[2]/text()');

    if(
$pokemon_row->length 0){
        foreach(
$pokemon_row as $row){
            echo 
$row->textContent "<br/>";
        }
    }


الان این کد بالا برام اونو خروجی میده ولی وقتی میخوام اون کلمات داخل جدول رو خروجی بگیرم با اینکه ادرس xpath رو هم درست میزنم بهم خروجی نمیده . خواستم دوستان لطفا کنن منو راهنمایی کنن .
من سایت رو باز میکنم و دکمه F12 میزنم بعد از پیدا کردن اون جمله مورد نظر copy xPath رو میزنم .
( من عذر خواهی هم میکنم اگه یه وقت نتونستم مفهوم رو برسونم )
نکته : این کد رو من از یه سایت خارجی کپی کردم برای همین متغیر ها اسمای عجیب غریب داره.

این کدی هست که xpath رو ادرسشو عوض کردم و تو همون صفحه مثلا عدد جلو کلمه battel رو میخوام خروجی بگیرم ولی هیچی بهم خروجی نمیده .
لطفا بهم بگین ایراد کار از کجاست .
کد پی‌اچ‌پی:
$html file_get_contents('http://wotlabs.net/eu/player/gladiatorBlack'); //get the html returned from the following url

$pokemon_doc = new DOMDocument();

libxml_use_internal_errors(TRUE); //disable libxml errors

if(!empty($html)){ //if any html is actually returned

    
$pokemon_doc->loadHTML($html);
    
libxml_clear_errors(); //remove errors for yucky html
    
    
$pokemon_xpath = new DOMXPath($pokemon_doc);

    
//get all the h2's with an id
$pokemon_row $pokemon_xpath->query('//*[@id="tankerStats"]/table/tbody/tr[2]/td[2]');

    if(
$pokemon_row->length 0){
        foreach(
$pokemon_row as $row){
            echo 
$row->textContent "<br/>";
        }
    }

  پاسخ
تشکر شده توسط :
#2
کد پی‌اچ‌پی:
<?php
$html 
file_get_contents('http://wotlabs.net/eu/player/gladiatorBlack');
$ex explode('<span>WN8</span>',$html);

$ex2 explode('</div>',$ex[1]);
echo 
intval(trim($ex2[0])); 
Angel
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : ayoubsys
#3
مرسی جواب دادی عزیز .
من امروز تست میکنم ببینم با این میشه اون نوشته های تو جدول هم گرفت یا نه . اگه مشکلی داشتم میپرسم .به هر حال تشکر Heart
فقط یکم تو ادرس دادناش مشکل دارم

اقا رضا میشه از نوشته های توی جدول هم برام یه نمونه بدی ممنونت میشم .
یکم چون سطح خیلی مبتدی ای هستم ادرس دادن برام سخته .
داخل جدول اول باید تگ tabel class ادرس بدم بعد مشخص کنم کدوم <tr> رو میخوام باز داخل اون باید <td> مورد نظر رو مشخص کنم . همین ادرس دادنش برام سخته
فک میکنم به کد array نیاز داشته باشه درسته ؟

مثلا تو جدول عدد جلوی destroy که 348 هست بهم بگی با همون کدی که دادی دیگه همه چیز برام روشن میشه .
  پاسخ
تشکر شده توسط :
#4
تابع explode میاد براساس استرینگی که میدی بهش متن رو برات جدا میکنه.
مثلا اگه متنت reza,ali,hasan باشه تو بیای با explode براساس , جداش کنی آرایه بهت میده که reza و ali و hasan میشن .

مام میایم از همین روش روی این سایت استفاده میکنیم .
توی سورس html سایت رو نگاه کن
view-source:http://wotlabs.net/eu/player/gladiatorBlack
نقل قول: مثلا تو جدول عدد جلوی destroy که 348 هست بهم بگی با همون کدی که دادی دیگه همه چیز برام روشن میشه .

دو تا Destroyed داره توش .
یکیش اینجوری
</span></span></td></tr><TR><TD>Destroyed</td>
<TD>Survived</td></tr><TR><TD>Destroyed</td>

خب عددی که میخوای بکشی بیرون بعد از </span></span></td></tr><TR><TD>Destroyed</td> اومده کافیه ما براساس اون کل متن رو بکنیم دو قسمت
بعد قسمت دوم هم بر اساس </td> جداش کنیم که اونم خودش میشه چند قسمت که کاریش نداریم
کار ما با قسمت اول توی قسمت دوم هست که میشه
کد:
<TD>348
حالا یخورده با توابع strip_tags و trim و intval تر تمیزش میکنیم .Blush

کد پی‌اچ‌پی:
<?php
$html 
file_get_contents('http://wotlabs.net/eu/player/gladiatorBlack');
$ex explode('</span></span></td></tr><TR><TD>Destroyed</td>',$html);

$ex2 explode('</td>',$ex[1]);
echo 
intval(trim(strip_tags($ex2[0]))); 

این روشی که بهت گفتم روش اصولی نیست اما کار میکنه .
و دیگه در گیر مسائل dom نمیشیCool
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : morteza0173 ayoubsys kasbookar
#5
خیلی اقایی داداش مرسی
  پاسخ
تشکر شده توسط :
#6
اقا رضا باعث شرمندگیه من دوباره پیام میذارم اخه این مسائل برام سخته یکم تمرین نداشتم تو این داستانا .
من سورسی که لینک دادی باز کردن توش این کدا بود
کد:
</span></span></td></tr><TR><TD>Destroyed</td>
                                                                <TD>348</td><TD>0.93</td>
                                                                
                                                                <TD>0</td><TD>-</td>
                                                                <TD>2</td><TD><span class="red">0.5</span></td>
                                                                <TD>86</td><TD><span class="red">0.81</span></td>
                                                                <TD><span class='ss60'>293</span><span class='ssRec'>347</span></td><TD><span class='ss60'><span class="green">0.97</span></span>
شما تو ex1 خط اول کد رو قرار دادی و توی ex2 فقط </td> نوشتی بهمون 348 داد حالا من هر جور کد ها رو جابه جا میکنم نمیتونم مثلا 0.93 بگیرم یا مثلا اون عدد 2 بگیرم .
من بازم عذر خواهی میکنم .
اقا رضا اگه لطف کنین ID تلگرام هم به من بدین اونجا ازتون سوال کنم دیگه اینجا اسپم نشه . مرسی .
من خودم توی خط ex2 بغل </tr>گرفتم یه </tr> دیگه گذاشتم گفتم شاید دومی رو بخونه ولی جوابی نگرفتم
  پاسخ
تشکر شده توسط :
#7
اقا رضا امروز کلی تمرین کردم با این کدا قلقش قشنگ دستم امد و متوجه شدم با این کد میاییم مابین یه تگی رو جدا میکنیم و نمایش میدیم و انطوری که فهمیدم این بود که تو این جدول با این کد نمیشه همه متغییر هاش رو فراخوانی کرد و نیاز به یه کد دیگه داره . چون تگ ها شبیه هم میشه و نمیشه بهش گفت که بین این دوتا رو نمایش بده . البته چون من خیلی مبتدی هستم تو اینکار ممکنه راه دیگه ای داشته باشه اگه لطف کنی توضیح بدی ممنونت میشم .
  پاسخ
تشکر شده توسط :
#8
گفتم تابع explode براساس رشته ای که بهش میدی متن رو برات جدا میکنه .
پس باید عضوهای دیگه آرایه رو ببینی.
کد پی‌اچ‌پی:
<?php
$html 
file_get_contents('http://wotlabs.net/eu/player/gladiatorBlack');
$ex explode('</span></span></td></tr><TR><TD>Destroyed</td>',$html);

$ex2 explode('</td>',$ex[1]);
$ex2 array_map('strip_tags',$ex2);
$ex2 array_map('trim',$ex2);


echo 
$ex2[0]; //348
echo "<br>";
echo 
$ex2[1]; //0.93
echo "<br>";
echo 
$ex2[4];//2
echo "<hr>";
echo 
"<pre>";
print_r($ex2); 
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط : ayoubsys
#9
مرسی اقا رضا . من چون با کد نویسی اشنا نیستم همین نمونه هایی که بهم میدی باهاشون استفاده میکنم . یکم با array و متغییرا اشنایی دارم و فک میکنم اینایی که دادی واقعا کارمو راه بندازه خیلی ازت ممنونم Blush
  پاسخ
تشکر شده توسط :
#10
ببخشید دوستان من به یک مشکل دیگه ای برخوردم .
این کدا همه از طریق تگ برات خروجی میدن خیلی هم کاربرد داره و یه جورایی قشنگ یاد گرفتم کار باهاش رو ولی تو بعضی شرایط اون کلمه ای که توی سایت ها مد نظر داری نمیتونی بگیری چون توی تگ خاصی نیست .
مثلا به عنوان مثال توی لینک زیر برین .
http://wotinfo.net/en/vehicles?playerid=...20-12-2017
توی لینک بالا اسم دوتا Vehicle نوشته شده که بر فرض الان ما میخواییم VK 100.01 P رو خروجی بگیریم ولی وقتی اول لینک view-source: میذاریم و اسم اون vehicle رو سرچ میکنیم میبینیم که اصلا توی تگ خاصی نیست .
الان به نظر شما برای این مدل شرایط هم کد خاصی وجود داره ؟ من از طریق xpath هم زدم با کد اولی که توی پست اول هست هم جواب نگرفتم .
توی اینترنت سایت های خارجی و ایرانی هم جوابی براش پیدا نکردم . پیشنهادی ندارین ؟
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان