PDA

View Full Version : میخوام این اطلاعات رو از این div بگیرم و چاپ کنم



saeed-71
دوشنبه 29 اردیبهشت 1393, 20:24 عصر
سلام.
میخوام این اطلاعات رو از این div بگیرم و تو دیتابیسم ذخیره کنم.چجوری با کرال این کار رو کنم؟
ادرس سایت www.test.com
میخوام ادرس تگ a رو با کلاس grid بخونه و چاپ کنه.12تا تو هر صفحه وجود داره.


<a class="grid" title="عنوان" href="ادرس لینک "></a>

لطفا راهنمایی کنید

Mr.Moghadam
دوشنبه 29 اردیبهشت 1393, 23:25 عصر
سلام
برای اینکار از کلاس زیر استفاده کن :
http://simplehtmldom.sourceforge.net/

مثال :

$html = file_get_html('http://www.google.com/');

تمام عکس های صفحه رو پیدا میکنه و آدرس عکس رو چاپ میکنه :

foreach($html->find('img') as $element)
echo $element->src . '<br>';

تمام لینک های صفحه رو پیدا میکنه و آدرس href رو چاپ میکنه :

foreach($html->find('a') as $element)
echo $element->href . '<br>';

saeed-71
سه شنبه 30 اردیبهشت 1393, 08:57 صبح
با کرال نمیشه؟

saeed-71
سه شنبه 30 اردیبهشت 1393, 13:30 عصر
سلام
برای اینکار از کلاس زیر استفاده کن :
http://simplehtmldom.sourceforge.net/

مثال :

$html = file_get_html('http://www.google.com/');

تمام عکس های صفحه رو پیدا میکنه و آدرس عکس رو چاپ میکنه :

foreach($html->find('img') as $element)
echo $element->src . '<br>';

تمام لینک های صفحه رو پیدا میکنه و آدرس href رو چاپ میکنه :

foreach($html->find('a') as $element)
echo $element->href . '<br>';

ارور میده عزیز
تو خط چاپ
Fatal error: Call to undefined function file_get_html()

AliRezaBeytari
سه شنبه 30 اردیبهشت 1393, 19:56 عصر
باید به این صورت باشه :



$html = file_get_contents("http://google.com");

cpuram
سه شنبه 30 اردیبهشت 1393, 21:28 عصر
باید به این صورت باشه :



$html = file_get_contents("http://google.com");

نه همین درسته
$html = file_get_html('http://www.google.com/');

حتما کلاسشو شما اد نکردین.

saeed-71
چهارشنبه 31 اردیبهشت 1393, 09:00 صبح
نه همین درسته
$html = file_get_html('http://www.google.com/');

حتما کلاسشو شما اد نکردین.
درست شد ممنون.ولی بعضی تگای a رو من نمیخوام بونه اونا چجوری پاک کنم؟
من فقط میخوام تگای a با کلاس grid بخونه هست رو بخونه


<a class="grid" title="عنوان" href="ادرس لینک "></a>

cpuram
چهارشنبه 31 اردیبهشت 1393, 12:27 عصر
همه رو بریز تو یک ارایه بعد ارایه رو جستجو کن اونایی که کلاس گرید داره رو بردار.

saeed-71
چهارشنبه 31 اردیبهشت 1393, 13:15 عصر
همه رو بریز تو یک ارایه بعد ارایه رو جستجو کن اونایی که کلاس گرید داره رو بردار.

با ارایه ها کار نکردم چجوری میشه این کار رو کرد؟

saeed-71
چهارشنبه 31 اردیبهشت 1393, 15:59 عصر
پیداش کردم میشه شکر خدا


foreach($html->find('a[class=grid]') as $element)

saeed-71
چهارشنبه 31 اردیبهشت 1393, 16:12 عصر
فقط یه چیزی یه break هم باد بذارم؟چون هر چیزیو چندیدن بار تکراری چاپ میکنه!

saeed-71
چهارشنبه 31 اردیبهشت 1393, 17:08 عصر
اگه بخوام اطلاعات داخل یهspan رو بخونم چی؟

cpuram
چهارشنبه 31 اردیبهشت 1393, 18:30 عصر
واسه table

<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<body dir=rtl><?php
require_once str_replace ( '\\', '/', dirname ( __FILE__ ) ) . '/inc/simple_html_dom.php';
$html = file_get_html('http://www.tala.ir/webservice/price_live.php');
foreach($html->find('table tr td') as $element)
{

if($element->id=='ounce')
{
echo 'انس طلا:'.$element->innertext.'</br>'.PHP_EOL;
}
if($element->id=='bazartehran')
{
echo 'طلا بازار تهران:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='geram18')
{
echo 'گرم 18 عیار:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='geram24')
{
echo 'گرم 24 عیار:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='sekke-gad')
{
echo 'سکه طرح قدیم:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='sekke-jad')
{
echo 'سکه طرح جدید:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='sekke-nim')
{
echo 'نیم سکه:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='sekke-rob')
{
echo 'ربع سکه:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='sekke-grm')
{
echo 'سکه گرمی:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='dolar-tafavot')
{
echo 'دلار:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='silver')
{
echo 'نقره:'.$element->innertext.'</br>'.PHP_EOL;
}

if($element->id=='oil')
{
echo 'نفت:'.$element->innertext.'</br>'.PHP_EOL;
}




}

saeed-71
چهارشنبه 31 اردیبهشت 1393, 18:46 عصر
من میخوام اطلاعات توی این اسپن رو بخونم اما نمیشه!



include('simple_html_dom.php');

$html = file_get_html('url');


foreach($html->find('span[id=phoneNumber]') as $element)
echo 'saeed';

میتونه بخونه چنتا وجود داره اما نمیدونم چجوری بگم داخلشو چاپ کن!

saeed-71
چهارشنبه 31 اردیبهشت 1393, 18:50 عصر
مرسی کارم حل شد.

saeed-71
چهارشنبه 31 اردیبهشت 1393, 20:32 عصر
برا من هر چیزی دوبار چاپ میشه.مثلا کلا 12 تا لینک وجود داره 24 تا چاپ میکنه.
بریک هم گذاشتم ارور داد.
مال چیه؟

cpuram
چهارشنبه 31 اردیبهشت 1393, 20:39 عصر
میشه کد رو بزاری ببینم از کدوم لینک میخونی؟

saeed-71
چهارشنبه 31 اردیبهشت 1393, 20:47 عصر
بله اقا


<?php
include('inc/simple_html_dom.php');
require_once 'inc/config.php';

$html = file_get_html('url');

foreach($html->find('a[class=grid]') as $element){
$link = $element->href . '<br>';
$sql = "INSERT INTO link (link,date) VALUE (:link,now())";
$result = $connect->prepare($sql);
$result->execute(array(
":link"=>$link
));
echo $link . '<br>';
}

?>

ای کد منه.فقط ادرس اون سایتو اینجا نمیتونم بدم چون دردسر میشه

MMSHFE
چهارشنبه 31 اردیبهشت 1393, 21:06 عصر
تا جایی که میشه کارتون رو با RegExp راه بندازین، استفاده از DOM و کلاسهای مرتبط مثل Simple HTML DOM و... رو ابداً توصیه نمیکنم چون برای پردازش یک اسکریپت 40 کیلوبایتی، فرضاً یک مگابایت حافظه مصرف میکنه. حالا درنظر بگیرین سایت شما 1000 بازدید کننده آنلاین داشته باشه. میشه 1 گیگابایت حافظه RAM مصرفی. برای مثال، میشه تمام تگهای a با کلاس grid رو با کد زیر بدست آورد:

$matches = array();
if(preg_match_all('#<a.*?class=["|\']?grid["|\']?.*?>(.*?)</a>#i', $html, $matches)) {
echo '<pre>' . print_r($matches, true) . '</pre>' . PHP_EOL;
}

saeed-71
چهارشنبه 31 اردیبهشت 1393, 22:00 عصر
توی کلاس simple_html_dom.php وقتی میرم خط 76 چیزی پیدا نمیکنم که زمان اتصال رو زیاد کنم .چجوری زمان اتصال رو افزایش بدم؟


Fatal error: Maximum execution time of 60 seconds exceeded in D:\xampp\htdocs\mmm\inc\simple_html_dom.php on line 76

cpuram
چهارشنبه 31 اردیبهشت 1393, 22:35 عصر
آقای شهرکی درست میگن بهتره ازش استفاده نکنید میدونید چرا؟ کل المنت ها رو به صورت ارایه در میاره.
اگه میخوایید منظورمو بفهمید اینو اجرا کنید
print_r($html->find('a[class=grid]'));
سیستم هنگ میکنه.

saeed-71
چهارشنبه 31 اردیبهشت 1393, 22:37 عصر
آقای شهرکی درست میگن بهتره ازش استفاده نکنید میدونید چرا؟ کل المنت ها رو به صورت ارایه در میاره.
اگه میخوایید منظورمو بفهمید اینو اجرا کنید
print_r($html->find('a[class=grid]'));
سیستم هنگ میکنه.
بله همینجوره.اما داره کار منو راه میندازه.چون رو کامپیوتر دارم ازش استفاده میکنم.ولی اصلاحش میکنم.مرسی

saeed-71
چهارشنبه 31 اردیبهشت 1393, 22:45 عصر
آقای شهرکی درست میگن بهتره ازش استفاده نکنید میدونید چرا؟ کل المنت ها رو به صورت ارایه در میاره.
اگه میخوایید منظورمو بفهمید اینو اجرا کنید
print_r($html->find('a[class=grid]'));
سیستم هنگ میکنه.
ولی خوب چجوری زمان اتصال رو افزایش بدم؟الان نیاز دارم گیرم!
تا اصلاحش کنم طول میکشه

cpuram
چهارشنبه 31 اردیبهشت 1393, 22:48 عصر
مربوط به php.ini میشه
max_execution_time

saeed-71
چهارشنبه 31 اردیبهشت 1393, 22:57 عصر
مربوط به php.ini میشه
max_execution_time
تغییر دادم اما باز همین ارور رو میده!
جای دیگه نیست بخواد تغییر بدم؟

cpuram
چهارشنبه 31 اردیبهشت 1393, 23:22 عصر
فکر کنم ایناس


post_max_size
upload_max_filesize
memory_limit
max_execution_time
max_input_time
session.gc_maxlifetime

saeed-71
یک شنبه 11 خرداد 1393, 13:23 عصر
اگه بخوام بگم اون تگ a که داخل دیو کلاس x قرار داره چی باید بگم؟



$html = file_get_html('http://www.x.ir/x');
foreach($html->find('div[class=brand-item]') as $element){
$link = $element->find('a');
$s = $link->href.'</br>'.PHP_EOL;
echo $r++.'-'.$s . '<br>';
}

MMSHFE
یک شنبه 11 خرداد 1393, 13:57 عصر
$html->find('div[class=brand-item] a')

saeed-71
یک شنبه 11 خرداد 1393, 15:19 عصر
اگه یه tabal تو این دیو کلاس وجود داشته باشه و من فقط 4تا td اولشو بخوام چی؟

MMSHFE
یک شنبه 11 خرداد 1393, 16:04 عصر
با همون سلکتورهای CSS کار کنید:

$tableRows = $html->find('div[class=brand-item] table tr');
for($i = 0; $i < 4; $i++) {
if(isset($tableRows[$i])) { // may be the number of rows is less than 4
// work with $tableRows[$i]
}

saeed-71
یک شنبه 11 خرداد 1393, 17:20 عصر
من برای td میخوام.
میخوام توی یک tr فقط 4تا td اول رو بخونه.
روش بالا رو امتحان کردم جواب نداد.چیزیو نگرفت

MMSHFE
دوشنبه 12 خرداد 1393, 10:58 صبح
با کد HTML شما رو ببینم تا دقیق بگم چیکار باید انجام بدین.

master_amin
دوشنبه 12 خرداد 1393, 13:16 عصر
دوست عزیز محتویات فایل require_once 'inc/config.php'; رو چطور باید بنویسیم تا بتونیم اطلاعات رو از سایت بگیریم؟

MMSHFE
دوشنبه 12 خرداد 1393, 13:18 عصر
به این فایل ربطی نداره. البته کدتون رو ندیدم ولی قاعدتاً این فایل باید تنظیمات سایت خودتون باشه.

saeed-71
سه شنبه 13 خرداد 1393, 08:16 صبح
اگه ما یه دیو کلاس داشته باشیم به اسم x
حالا داخل این x دو تا چیزو بخوایم همزمان بگیرم.
یکی تگ a داخل h1
یکی دیگه اطلاعات داخل خود x
چی باید بنویسم؟

master_amin
شنبه 17 خرداد 1393, 22:31 عصر
چرا با استفاده از simple_html_dom بعد از ذخیره کردن محتویات سایت فوت به صورت زیر نمایش داده میشه؟


�ܺ�u�Ӊ�����_�f���~u� y�� �� |���v��

saeed-71
شنبه 17 خرداد 1393, 23:26 عصر
چرا با استفاده از simple_html_dom بعد از ذخیره کردن محتویات سایت فوت به صورت زیر نمایش داده میشه؟


�ܺ�u�Ӊ�����_�f���~u� y����|���v��


کدی که استفاده کردیو بذار

master_amin
یک شنبه 18 خرداد 1393, 22:33 عصر
include('simple_html_dom.php');$html = new simple_html_dom();$html = file_get_html('http://www.tsetmc.com/Loader.aspx');echo $html;

هر کاری میکنم فونتش درست نمیشه