Парсер статей по ключевым словам

Делаем простой парсер новостей на php.

Итак, есть новостной ресурс (для примера, возьмем новости с Яндекса) и есть задача получать на автомате с этого сайта несколько последних новостей. Полученные новости мы должны в нужном нам формате выводить на странице нашего сайта.

1. Находим нужную rss ленту нашего новостника. В нашем случае — это http://news.yandex.ru/index.rss (у Яндекса множество лент, разбитых по категориям. Берем одну из них — «Главные новости»). Новости в ленте состоят из заголовка (с ссылкой на саму новость), даты публикации и краткого анонса.

X-Parser Light – парсер контента по списку ключевых слов (Опт 40)

Сам xml документ выглядит примерно так (укорочен):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <?xml version="1.0" encoding="utf-8"?> <rss xmlns:yandex="http://news.yandex.ru" xmlns:str="http://exslt.org/strings" version="2.0"> <channel> <title>Яндекс.Новости: Главные новости</title> <link xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:lego="https://lego.yandex-team.ru">http://news.yandex.ru/index.html</link> <description> Первая в России служба автоматической обработки и систематизации новостей. Сообщения ведущих российских и мировых СМИ. Обновление в режиме реального времени 24 часа в сутки. </description> <image xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:lego="https://lego.yandex-team.ru"> <url>http://company.yandex.ru/i/50×23.gif</url> <link>http://news.yandex.ru</link> <title>Яндекс.Новости</title> </image> <lastBuildDate>Mon, 12 Nov 2012 09:20:44 +0000</lastBuildDate> <item> <title>Путин утвердил состав нового Совета по правам человека</title> <link>http://news.yandex.ru/yandsearch?cl4url=www.forbes.ru%2Fnews%2F203951-putin-utverdil-sostav-novogo-soveta-po-pravam-cheloveka&amp;cat=0&amp;lang=ru</link> <description>Президент России Владимир Путин утвердил новый состав президентского Совета по развитию гражданского общества и правам человека ( СПЧ ). Текст указа опубликован на сайте Кремля. В утвержденном списке – 39 новых фамилий.</description> <pubDate>Mon, 12 Nov 2012 08:36:10 +0000</pubDate> <pubDateUT>1352709370</pubDateUT> <guid>http://news.yandex.ru/yandsearch?cl4url=www.forbes.ru%2Fnews%2F203951-putin-utverdil-sostav-novogo-soveta-po-pravam-cheloveka&amp;cat=0&amp;lang=ru</guid> </item> <item> <title>«Луркморье» могло попасть в «черный список» за статью о марихуане</title> <link>http://news.yandex.ru/yandsearch?cl4url=izvestia.ru%2Fnews%2F539403&amp;cat=0&amp;lang=ru</link> <description>IP-адрес «Луркоморья» (85.17.124.180) был добавлен в «черный список». Решение о внесении ресурса в список запрещенных сайтов принял ФСКН. Об этом сообщается на официальном сайте Роскомнадзора.</description> <pubDate>Mon, 12 Nov 2012 07:30:00 +0000</pubDate> <pubDateUT>1352705400</pubDateUT> <guid>http://news.yandex.ru/yandsearch?cl4url=izvestia.ru%2Fnews%2F539403&amp;cat=0&amp;lang=ru</guid> </item> </channel> </rss>

Как видно из примера, структура включает несколько строк служебной информации об источнике, а уже затем идут сами новости, обрамленные тегами item. В конце документа идут заключительные теги channel и rss.

Для нашей задачи нужны только новости в тегах item, при этом лишь определенное количество новостей (последние четыре).

2. Парсим (считываем) нужное нам количество строк из xml-документа.

1 2 3 4 5 6 7 8 9 $buffer="";//здесь будем хранить весь полученный документ $handle = fopen("http://news.yandex.ru/index.rss", "r"); for($i=0;$i<46;$i++): feof($handle); $line = fgets($handle); $buffer .=$line; endfor; fclose($handle); $buffer .="</channel></rss>";

Здесь мы считываем 46 строк. Почему 46? Потому что последняя новость (ее заключительный тег item) находится на 46 строчке. Чтобы спарсенный документ был цельным, мы добавляем в его конец закрывающие теги channel и rss.

3. Разбираем полученный xml-документ в массив. Для решения данной задачи используем специальные функции php.

1 2 3 4 5 6 // создаем xml-анализатор, ссылка на него помещается в $p $p = xml_parser_create(); //следующая функция разбирает наш документ и создает два массива (один со значениями, другой с индексами) xml_parse_into_struct($p, $buffer, $vals, $index); //Освобождаем память, занятую XML анализатором $p xml_parser_free($p);

4. Для вывода полученного контента нам достаточно одного массива со значениями $val. Нам нужно создать цикл, который бы выводил заголовки, дату и анонсы новостей.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?php //начинаем с 20-го элемента, т.к. вначале идут не новости, а служебная информация об источнике $e=20; //выводим четыре новости for($k=0;$k<4;$k++): //заголовок $yandex_title=$vals[$e][‘value’]; $e=$e+2; //ссылка на новость $yandex_link=$vals[$e][‘value’]; $e=$e+2; //анонс новости $yandex_desc=$vals[$e][‘value’]; ?> <div class="yandex_news"> <div class="news_text"> <h2><a href="<?=$yandex_link?>"target="_blank"><?=$yandex_title?></a></h2> <?=$yandex_desc?></a> </div> </div> <?php //делаем переход к индексу в массиве для следующей новости $e=$e+11; endfor; ?>

Таким образом, на нашей странице будут выведены последние новости от новостной ленты Яндекса.

Другие посты

Вебмастера, блоггеры и любители по самостоятельной раскрутке сайтов вынуждены собирать и анализировать огромное количество данных о веб-сайтах, страницах, ссылках и других мета данных. Постоянно обрабатывать большое количество информации без использования сео софта практически невозможно или очень затратно по времени сделать.

Top Analyzer — бесплатная программа для анализа контента сайтов конкурентов из ТОПа ПС.

Парсер тематического контента по списку ключевых слов из поисковых систем

Без этой информации трудно рассчитывать на высокие позиции в поиске, не зная как идут дела у конкурентов.

Программа предназначена для сбора ссылок, описаний, заголовков, ключевых слов и других данных релевантных страниц конкурентов из ТОПа поисковых систем Яндекса и Гугла. Своеобразный парсер поисковой выдачи контента ваших конкурентов.

Возможности парсера контента:

  • Сбор позиций по ключевым словам
  • Сбор адресов ссылок
  • Собирает МЕТА заголовки, описания, ключевые слова и другие данные со страниц
  • Парсит «Title» сайта, статей
  • Парсит «Dеscription» сайта, статей
  • Подсчет количества слов и символов для каждого элемента страницы
  • Анализ плотности вхождения ключевых слов на странице
  • Экспорт результатов парсинга
  • Лог работы

В общей сложности парсер контента сайта собирает и анализирует контент по 26 позициям, от ссылок до количества символов на странице, часть из которого можно видеть на скриншоте .

Настройка парсера

В настройках программы можно изменить параметры поиска или оставить по умолчанию — поисковая система, регион сбора, количество данных, пауза между потоками, количество потоков сбора данных.

Алгоритм работы Top Analyzer:

  • Запуск программы
  • В поле «Ключевые слова» введите список КС каждый с новой строки
  • Кнопка «Запуск» — cбор выдачи контента
  • После сбора кнопка «Запуск» — анализ выдачи контента
  • Кнопка «Экспорт» — выбор нужного вида и формата экспорта собранного контента (csv, html)

Программа сделана на JAVA, поэтому необходима установка Java SE Runtime Environment 8 для вашей операционной системы Windows.

Наблюдать за ходом работы программы удобно, если контролировать отображение логов работы в нижнем поле окна программы, нажав на кнопку «Логи»

Парсер контента сайтов Top Analyzer, поможет вам быстро собрать и удобно анализировать контент сайтов конкурентов посредством сбора релевантных страниц из ТОПа Yandex и Google по ключевым словам. 5 удобных для анализа видов отчета, позволяют всесторонне оценить собранную информацию о конкурентах в занимаемой нише, в том числе и самое главное, именно позиции занимаемые вашим сайтом по сравнению с конкурентами. Скачать можно Top Analyzer с оф-сайта.

Парсер контента по ключевым словам из выдачи Google

 

Здравствуйте, товарищи, в данной статье разговор пойдет о парсинге.

Что же такое парсинг? Это обработка какого-либо текста с целью извлечения нужной информации. Парсинг наиболее часто необходим при работе с сетью. Большие возможности для обработки текста предоставляют регулярные выражения — но они сложны для новичков, поэтому остановимся на простых функциях для работы со строками. Функции эти — Pos/PosEx,Copy,Delete. Парсинг больших объемов усложненного текста (например, содержимого веб-страниц) требует умения работать с памятью и знаний алгоритмов.

PosEx — это аналог бейсиковой InStr. Данная функция позволяет узнать позицию вхождения указанной подстроки в строку, начиная с указанной позиции.

Pos — это упрощенный аналог PosEx, отличие в том, что она не позволяет указывать позицию для поиска и возвращает позицию первого попавшегося вхождения.

Copy — это почти полный аналог бейсиковой Mid.

Функция Delete позволяет удалить из строки участок, ограниченный указанными позициями.

Пример 1. Извлекаем нужный участок из строки.

Допустим, нам нужно получить значение какого-либо скрытого поля ввода — там обычно хранят сессионные идентификаторы (токены) и прочую инфу, в данном случае содержимое тега Input:

(Строка эта взята прямо из этой страницы, вы сами можете убедиться в этом, открытв исходный код веб-страницы в вашем браузере.)

Пример 2. Функции, для работы с текстом, базирующиеся на Copy/Pos/Delete.

Простая функция для получения части строки, между одним или несколькими разделителями (кодинг не мой):

function StringField(text, delim: string; vilken: integer): string;
var
  start, slut, I: integer;
  temptext: string;
begin
  start := 0;
  if vilken > 0 then
  begin
    temptext := text;
    if vilken = 1 then
    begin
      start := 1;
      slut := pos(delim, text);
    end
    else
    begin
      for I := 1 to vilken — 1 do
      begin
        start := pos(delim, temptext) + Length(delim);
        temptext := copy(temptext, start, Length(temptext));
      end;
      slut := pos(delim, temptext);
    end;
    if start > 0 then
    begin
      if slut = 0 then
        slut := Length(text) + 1;
      Result := copy(temptext, 1, slut — 1);
    end
    else
      Result := text;
  end
  else
    Result := text;
end;

«жадная» функция для получения количества указанных слов в строке (кодинг мой):

function CountString(const S, strtofind: string;
  Flags: TReplaceFlags): integer;
var
  SearchStr, Patt: string;
  Offset: Integer;
begin
  if rfIgnoreCase in Flags then
  begin
    SearchStr := AnsiUpperCase(S);
    Patt := AnsiUpperCase(strtofind);
  end else
  begin
    SearchStr := S;
    Patt := strtofind;
  end;
  Result := 0;
  while SearchStr <> » do
  begin
    Offset := AnsiPos(Patt, SearchStr);
    if Offset = 0 then
    Break;
    inc(result);
    SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
  end;
end;

«Знаменитая» функция Pars. Данная функция получила широкое распространение, однако, не стоит ее использовать, по причине ее «быдлокодности».

function Pars(T_, Text, _T: string): string;
var
a, b:integer;
begin
Result := »;
if (T_=») or (Text=») or (_T=») then Exit;
a:=Pos(T_, Text);
if a=0 then Exit else a:=a+Length(T_);
Text:=Copy(Text, a, Length(Text)-a+1);
b:=Pos(_T, Text);
if b>0 then Result:=Copy(Text, 1, b — 1);
 end;

На этом пока все. Более сложные примеры будут в следующих статьях.

Подучите функции для работы со строками, они постоянно будут вам нужны.

Спасибо за внимание.

Урок 18 — Как определить разрядность Windows в Delphi ?СодержаниеУрок 20 — Chr cryptor

Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.

Добавить комментарий

Закрыть меню