Исполненный

Переделать Парсер

t800

52.2


Задание:

Есть скрипт на php:


<?php
// Задаем заголовки чтобы по русски отображалось нормально
echo '<html xml:lang="ru-ru" lang="ru-ru" >';
echo '<head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head>';
echo "Парсер от t800 :-) <br/><br/>";


set_time_limit(0); // это для того чтобы скрипт не отвалился через 30 секунд

//подгружаем библиотеку Simple HTML Dom
require_once 'library/simplehtmldom.php';

/* Теперь сам скрипт */


$i=1;

// Указваем количество страниц сколько хочем спарсить
$n=5;

// Пишем дату сверху в файл куда пишем то что будем парсить
$time = date('Y:m:d:H:i');
$fp = fopen("parse.txt", "w"); // Открываем файл в режиме записи
$test = fwrite($fp,$time . "\r\n");
fclose($fp); //Закрытие файла

// Указываем адрес карты сайта (файла sitemap.xml) откуда берем ссылки страниц которые надо парсить

$sitemap = "http://site.ru/sitemap.xml";

// загружаем файл sitemap

$xml = simplexml_load_file($sitemap);

// Извлекаем ссылки из файла sitemap.xml

foreach ($xml->url as $url_list) {
$url = $url_list->loc;

// вызываем нашу функцию parse() с указанием url страницы которую надо спарсить

parse($url);

// Выводим инфу о загрузке
echo " *** Загружено: ".$i." из ".$n." страниц *** \r\n ";
echo "<br>";
echo str_pad('',4096)."\n";
echo str_pad('',4096)."\n";
flush();
// Тут проверка условия на то сколько спрарсили страниц и выход из скрипта если уже спарсили сколько задано
if($i++>=$n){
echo " *** Готово! *** ";
exit;
}
}

// Здесь парсим страницу с url нашей фукцией parse()
// А это код нашей функция parse()

function parse($url)
{

$data = @file_get_contents($url); // собачка нужна в если сервер нам вернул 404, это вызовет Warning:, поэтому экранируем ошибки
if(trim($data)=='')return false; // бывает что сайт недоступен, тогда страницy не грузим а выходим из функции

//создаём новый объект
$html = new simple_html_dom();
//загружаем в него данные
$html = @file_get_html($url); // собачка нужна в если сервер нам вернул 404, это вызовет Warning:, поэтому экранируем ошибки

//проверяем что спарсили страничу с товаром (проверку делаем по цене) если цены нету то выходим из функции

$ret = $html->find('div[class=item_current_price]', 0);
if ($ret==null) return false;

//находим путь категории на странице ...

foreach($html->find('ul[class=breadcrumb-navigation]') as $ul)
{
foreach($ul->find('li') as $li)
{
foreach($li->find('a') as $a)
{
echo $a->plaintext . '/';
$catalog = $a->plaintext . '/';
$fp = fopen("parse.txt", "a"); // Открываем файл в режиме дописывания
$test = fwrite($fp, $catalog ); // Запись в файл
fclose($fp); //Закрытие файла
}

}
}


//echo '<br/>';

$fp = fopen("parse.txt", "a"); // Открываем файл в режиме дописывания

// находим название

foreach($html->find('h1[class=header_grey]') as $element) echo $element->plaintext;

//echo '<br>';

$test = fwrite($fp, $element->plaintext ); // Запись в файл
if ($test) echo '';
else echo 'Ошибка при записи в файл.';


// находим цену

foreach($html->find('div[class=item_current_price]') as $element) echo '';

$test = fwrite($fp, $element->plaintext ); // Запись в файл

if ($test) echo '';
else echo 'Ошибка при записи в файл.';


// находим картинку

foreach($html->find('a[class=fancy bx_bigimages_aligner]') as $element) echo '';

$url_img = "http://site.ru/" . $element->href;

// извелкаем имя файла картинки из url картинки
$file_name= substr($url_img, strrpos($url_img,"/")+1, strlen($url_img)-strrpos($url_img,"/")); //Retrive file name from url

// задаем папку куда картинку сохранять
$img_path = "./images/".$file_name;

$test = fwrite($fp, $img_path ); // Запись в файл
if ($test) echo '';
else echo 'Ошибка при записи в файл.';

// Закачиваем и сохраняем изображение

grab_image($url_img,$img_path);

// находим краткие характеристики

foreach($html->find('div[class=props_top]') as $element) $test = fwrite($fp, $element); // Запись в файл

// находим полные характеристики

foreach($html->find('div[class=left_prop]') as $element) $test = fwrite($fp, $element); // Запись в файл

foreach($html->find('div[class=left_value]') as $element) $test = fwrite($fp, $element); // Запись в файл


// Записываем концы строк

$test = fwrite($fp, "\r\n" );
fclose($fp); //Закрытие файла

//в конце освобождаем ресурсы (не знаю зачем это надо, но говорят, что надо, иначе скрипт может зависнуть)
$html->clear();
unset($html);

}

// Это функция grub_image() че картинки скачивает сurl-ом и сохраняет (взята из комментариев на Stack Overflow)
// ЗЫ сurl-ом потому что curl-ом быстрее скачивается

function grab_image($url,$saveto){
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$raw=curl_exec($ch);
curl_close ($ch);
if(file_exists($saveto)){
unlink($saveto);
}
$fp = fopen($saveto,'x');
fwrite($fp, $raw);
fclose($fp);
}

?>


/*===============================================================*/

Что нужно сделать. Нужно взять этот скрипт и переделать чтобы он Парсил Статьи с Новостями с сайта Lenta.ru и Записывал их в один Тестовый Файл

Список статей которые необходимо спарсить Cкрипт должен брать из файла RSS https://lenta.ru/rss












Бюджет: 500 руб.

Категория : Программирование

Дата: 17.02.2018 17:01


Выбран исполнителем

Psilen

10.0

Предложения Исполнителей (1)


Оставлять свои предложения по заданию могут только зарегистрированные пользователи с аккаунтом специалиста.
Зарегистрируйтесь или войдите на сайт под своим именем.