Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011
Откуда: Одесса, Украина
Помог: 131 раз(а)
|
1) curl или file_get_contents
2) preg_match preg_match_all
3) тут уже просто работа с бд
(Добавление)
вот пример парсера. вытаскивает с сайта информацию о товарах(название, цена, описание) и картинки. всё это сохраняется в базу. скрипт вытащил 5Гб картинок и занес информацию в базу на 60Мб. всё это происходило в течении 3-х дней
PHP:
скопировать код в буфер обмена
<?PHP mysql_connect('localhost','root','root') or die('Cannot connect to MySql Server'); $last_db_id = $last_id[0]; $f_arr = file('log.txt'); $last_file = explode('.',$last_file); $last_file_id = $last_file[0]; $start = 26719; $start = max(array($last_file_id,$last_db_id,$start)); $end = 40000; $link = "http://instore.kz/product_info.php/products_id/"; $fp = fopen("log.txt","a+"); $separator = "\n-----------------------------------------------------------------------\n\n"; $file_header = $separator."Link: ".$link."\n\tStart: ".$start."\n\tEnd: ".$end."\n\n\tDate: ".date('Y-m-d H:i:s')."\n\n"; for($i=$start;$i<$end;$i++) { preg_match('/Товар не найден!/',$content,$matches); if($matches) { print "<div>"; print $i.". \t"; print "Товар не найден!"; print " <strong>".date('H:i:s')."</strong>\n"; $fp = fopen("log.txt","a+"); print $data; print "</div>"; } else { //id парсинга $id = $i; $arr_good['id'] = $i; //наименование preg_match('/<td class="main">[\s]+<h1[^>]+>([^<]+)</',$content,$match); //цена if(preg_match('/<div class="main">[\s]+<strong>[^<]+<\/strong>([^<]+)<br>/',$content,$match)) { $price = $match[1]; } else { $price = 'нет цены'; } $arr_good['price'] = $price; //ссылка на товар $arr_good['linkgoods'] = $link.$i; //описание preg_match('/<div style="padding-left: 20px;">([\w\W]+)(?=<\/div>[\s]+<\/td)/',$content,$match); //изображение $image_link = "http://images.instore.kz/popup_image.php/pID/".$id; //print $content; if(preg_match('/<td align="center">[\s]*<img src="([^"]+)"/',$content,$match)) { $image_url = "http://images.instore.kz/".$match[1]; $save_image_name = $id.'_0_'.time().'.'.$image_ext; $save_path = "./images/".$save_image_name; $arr_images[] = array($original_name,$save_image_name); $q = 0; $match = false; //дополнительные картинки если есть do { if($match) { $image_url = "http://images.instore.kz/".$match[1]; $save_image_name = $id.'_'.($q).'_'.time().'.'.$image_ext; $save_path = "./images/".$save_image_name; $arr_images[] = array($original_name,$save_image_name); } } while(preg_match('/<td align="center">[\s]*<img src="([^"]+)"/',$content,$match)); } mysql_query('INSERT INTO `goods` (`original_id`,`donnor`,`name`,`link`,`date`,`description`,`price`) VALUES("'.$arr_good['id'].'","1","'.$arr_good['name'].'","'.$arr_good['linkgoods'].'",NOW(),"'.$arr_good['description'].'","'.$arr_good['price'].'")') or die('Error add good'); foreach($arr_images as $image) { mysql_query('INSERT INTO `images` (`name`,`original_name`,`good`) VALUES("'.$image[1].'","'.$image[0].'","'.$last_id.'")') or die('Error add image'); } print "<div style='color: green'>"; echo "Товар ".$id." успешно добавлен"; print " <strong>".date('H:i:s')."</strong>"; print "</div>"; } }
|