PDA

View Full Version : ویرایش جرئی یک سورس html-dom (حل شد)



farbod0007
شنبه 17 اسفند 1392, 18:44 عصر
سلام خدمت دوستان گرامی من در یک پروژه دارم از simple_html_dom.php کمک میگیرم .که همانطور که میدانید کارش اینه که یک صفحه رابرای ما در یک صفحه دیگه فراخوانی میکنه. در همین باره میخواستم یک صفحه ای را فراخوانی کنم که درش لینک وجود دارد و من نمیخواهم این لینک ها در صفحه وجود داشته باشد و میخوام متن بصورت ساده بیاد. آیاامکان همچین کاری وجود دارد؟یا خیر؟ ممنون که کمک میکنید...

mahmod2000
شنبه 17 اسفند 1392, 19:07 عصر
از این طریق میتونید متن داخل تگ مورد نظرتونو بدون اسکریپت دریافت کنید.. یعنی همون متن خالی



$html->find('tagName')->plaintext;

farbod0007
یک شنبه 18 اسفند 1392, 14:56 عصر
ممنون اقا محمد
ولی اسم تگ مورد نظر table هست که داخل tagname در کدی که دادید گذاشتم ولی جواب نداد کد خودم هم این جا گذاشتم
$ar_table = $html->find('table');

farbod0007
یک شنبه 18 اسفند 1392, 15:03 عصر
البته کد رو بصورت $ar_table = $html->find('table')->plaintext;
هم گذاشتم ولی اون موقع دیگه هیچ چی نمایش داده نمیشه

MMSHFE
یک شنبه 18 اسفند 1392, 15:21 عصر
یک نمونه از کد HTML که دارین و چیزی که میخواین براتون تولید بشه بگذارین. شاید بدون DOM و با RegExp بشه نتیجه بهتر و با راندمان بالاتری گرفت.

farbod0007
یک شنبه 18 اسفند 1392, 15:28 عصر
جناب MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) کد php هست نه HTML
بعد کد هم simplehtmldom هست دیگه میدونن دیگه احتمالا بچه ها
http://simplehtmldom.sourceforge.net/

MMSHFE
یک شنبه 18 اسفند 1392, 15:37 عصر
کد اونو میدونم. میگم کد جدولی که میخواین لینکهاش حذف بشه رو بگذارین.

farbod0007
یک شنبه 18 اسفند 1392, 15:48 عصر
خدمت شما
http://www.beytoote.com/marketprices/phone-price/

MMSHFE
یک شنبه 18 اسفند 1392, 17:06 عصر
این کد رو تست کنید:


<?php
/**
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an
* array containing the HTTP server response header fields and content.
*/
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => '', // handle all encodings
CURLOPT_USERAGENT => 'spider', // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);

$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$data = get_web_page('http://www.beytoote.com/marketprices/phone-price/');
$data = preg_replace('#<a.*?>(.*?)</a>#i', '$1', $data['content']);
echo '<pre>' . htmlentities($data, ENT_QUOTES, 'utf-8') . '</pre>';
?>

با این کد من همه لینکها رو حذف و به متن معمولی تبدیل کردم. حالا هرجور لازم دارین تغییرش بدین یا اینکه خروجیشو بدین به simple_html_dom تا جدولهای دلخواه رو ازش استخراج کنه براتون.

farbod0007
یک شنبه 18 اسفند 1392, 17:25 عصر
همین کدی که دادید عینا در
wamp و سرور خودم گذاشتم و این ارور رو دادن:

Warning: curl_setopt_array() [function.curl-setopt-array]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home3/gsayhgd/public_html/wp-content/themes/gld/index.php on line 37

farbod0007
یک شنبه 18 اسفند 1392, 17:29 عصر
این هم ارور wamp
http://upload7.ir/imgs/2014-03/33520676369040723031.gif

MMSHFE
یک شنبه 18 اسفند 1392, 17:58 عصر
یا php شما در حالت safe mode اجرا شده و یا curl فعال نیست. کد مشکلی نداره. بهتره از xampp استفاده کنید.

farbod0007
یک شنبه 18 اسفند 1392, 18:49 عصر
من توی سایت های انلاین هم تست کردم
http://phptester.net/
http://sandbox.onlinephpfunctions.com/
ولی جواب ندادن
ولی وقتی روی این سایت
http://codepad.viper-7.com/
تست کردم جواب داد.

سیستم من وردپرسه چه کنم تا کار کنه؟

farbod0007
یک شنبه 18 اسفند 1392, 20:43 عصر
کسی از دوستان اگر راه حل دیگری به ذهنش میرسه بیان کنه
ازتون ممنونم

farbod0007
دوشنبه 19 اسفند 1392, 14:32 عصر
up..................

MMSHFE
دوشنبه 19 اسفند 1392, 14:44 عصر
لطفاً Spam نگذارین. اگه کسی بلد باشه و تمایل داشته باشه، پست میگذاره. درمورد سیستمتون که گفتین وردپرس هست نمیدونم حقیقتش چون کدهاتون رو ندیدم ولی بهرحال باید چک کنید چه خطایی میده یا اگه صفحه خالی میاد، ببینید cURL بازه؟ بعضی وقتها توی disabled_extension یا disabled_functions رو هم باید چک کنید. بهرحال همونطور که گفتم کد تست شده و مشکلی نداره و اگه مشکلی هست، صددرصد از تنظیمات هاستتون یا اسکریپتی که ازش استفاده میکنید هست.

farbod0007
دوشنبه 19 اسفند 1392, 15:19 عصر
درسته همانطور که گفتم کد شما مشکلی نداره
ولی یه چیزی جناب mahmod2000 (http://barnamenevis.org/member.php?129163-mahmod2000) گفتم که اگه اون بشه کار خیلی بی دردسرتره
میخواستم نظر دوستان راجب اونو بدونم

mahmod2000
دوشنبه 19 اسفند 1392, 15:31 عصر
دوست عزیز با عرض پوزش من خیلی درگیر هستم این چند وقت..
وقت بهم اجازه بده کد را بررسی میکنم و طبق همان چیزی که گفتم براتون کد را قرار میدم

باز هم پوزش

farbod0007
دوشنبه 19 اسفند 1392, 15:49 عصر
این کد رو تست کنید:


<?php
/**
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an
* array containing the HTTP server response header fields and content.
*/
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => '', // handle all encodings
CURLOPT_USERAGENT => 'spider', // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);

$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$data = get_web_page('http://www.beytoote.com/marketprices/phone-price/');
$data = preg_replace('#<a.*?>(.*?)</a>#i', '$1', $data['content']);
echo '<pre>' . htmlentities($data, ENT_QUOTES, 'utf-8') . '</pre>';
?>

با این کد من همه لینکها رو حذف و به متن معمولی تبدیل کردم. حالا هرجور لازم دارین تغییرش بدین یا اینکه خروجیشو بدین به simple_html_dom تا جدولهای دلخواه رو ازش استخراج کنه براتون.



برای پشتیبانی هاستم فرستادم جوابشون این بود:

با سلام
امکان استفاده از آپشن CURLOPT_FOLLOWLOCATION برای تابع curl روی سرویس میزبانی وب وجود ندارد.
این آپشن حتی با خاموش کردن safe mode نیز قابل استفاده نخواهد بود.



حالا من چی کارکنم واقعا گیر کردم

mahmod2000
دوشنبه 19 اسفند 1392, 17:30 عصر
خوب این CURLOPT_FOLLOWLOCATION رو حذف کنید ببینید کار میکنه کد
احتمال زیاد باید کار کنه

شما چه بخشی از این پیج رو میخواید بگیرید؟

farbod0007
دوشنبه 19 اسفند 1392, 17:57 عصر
من میخوام table
قیمت موبایل رو بگیرم

mahmod2000
دوشنبه 19 اسفند 1392, 18:54 عصر
require 'simple_html_dom.php';

function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_ENCODING => '', // handle all encodings
CURLOPT_USERAGENT => 'spider', // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);

$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$data = get_web_page('http://www.beytoote.com/marketprices/phone-price/');

$html = str_get_html($data['content']);

foreach($html->find('div.pricetab') as $price)
{
$price = preg_replace('#<a.*?>(.*?)</a>#i', '$1', $price);
echo $price;
}



فایل simple_html_dom.php مسیرش رو درست کنید موقع استفاده کردن
با کمک کد جناب شهرکی اطلاعات جدول رو میگیریم و لینکی اگه باشه حذف میشه

بعد میتونی بهش استایل بدی، همونجور که میخواید نمایش بدید

ببینید کار میکنه یا نه

farbod0007
دوشنبه 19 اسفند 1392, 19:23 عصر
جناب محمد اقا واقعا از شما تشکر میکنم
واقعا یک بار بزرگی را از روی دوش بنده برداشتید
و همچنین از شما جناب شهرکی


(واقعا نمیشود از دکمه تشکر استفاده کرد)