Какие библиотеки\решения лучше использовать для парсинга сайтов?

Статус
В этой теме нельзя размещать новые ответы.
Мои наблюдения по поводу парсинга, если же делать для небольшого количества порталов можно использовать и DOM подходы. НО если планируется парсить много разных сайтов, лучше сразу писать на регулярках (preg_match), т.к. насмотрелся как люди пишут HTML и очень сомневаюсь, что эти либы правильно будут работать. Для удобства, сделал админку, где можно создавать человеко понятные шаблоны с некоторыми спец символами, если тяжелый случай.
К примеру такого плана:
Код:
<h1{*}>^</h1>
Но часто приходится прибегать к более сложным вариантам когда явной зацепки нету, приходится брать по две-три зацепки:

Код:
<p class="imp">{*}</p>{|}^<img{*}Znuasmall{*}>

Регулярные выражения в таком виде и понятнее и надежнее. Правда тоже нужно знать нюансы, но это все на практике вырабатывается.
 
ересь какаято...
Qwst-fx скорее всего говорит вот про это Для просмотра ссылки Войди или Зарегистрируйся (ссылка на клип ту нете рабочая) он там хитро извернулся что бы пропарсить проксей, единственный минус это то что надо держать включенным браузер, вобщем решение интересное.
 
Пока использую и регулярки (там где это удалось) и Simple HTML DOM там где не удалось написать регулярку, или её писать лениво. Например поиск всех ссылок со страницы с помощью Simple HTML DOM.
 
...Simple HTML DOM там где не удалось написать регулярку...
Вот удобная программа для составления регулярок ( Для просмотра ссылки Войди или Зарегистрируйся ), очень облегчает жизнь. Руссификацию под нее так и не нашел, но она там в принципе и не нужна.

Так же вот снифер ( Для просмотра ссылки Войди или Зарегистрируйся ) удобный для разбора запросов при парсинге, простой без выпендрежей присутвует поддержка https. За все время написания парсеров так и не смог перелесть с него на како то другой снифер, все они какие то монстро подобные, с кучей разной хрени не нужной при парсинге. Этот снифер очень удобен при отловки Гет и Пост запросов, аякс же не очень очень удобно в нем ловить но вполне реально. Для аякс запросов на данный момент по моему мнению лучше использовать встроенный снифер в браузере ( опера или хром ), чисто визуально более удобнее отслеживать аякс запросы.
 
1) У проксиметрона есть такая фича как лог, в котором отображаются все GET POST и поля. Это делает снифер, как аналог по видимости имелся ввиду wireshark, который жутко наворочен и т.п. и через который не посмотришь https трафик, без танцев. а тут получается 2 в одном(прокси + сниффер http(s) трафика). и размер маленький, и ресурсы не жрет как конь.
2) редактор регулярок есть и в вебе пример (Для просмотра ссылки Войди или Зарегистрируйся) зачем тормоз комодо?
3) простой текст, это текст, а не html код.
 
  • Заблокирован
  • #17
сам юзаю Для просмотра ссылки Войди или Зарегистрируйся и регулярки. вот пример.
PHP:
<?php
require 'snoopy.class.php';
require 'useragents.lib.php';// взять мона тут http://www.nulled.cc/threads/190092/page-3#post-1926004
$page = new Snoopy;
$page->agent = chooseBrowser();
$page->referer = 'http://demo-referer.com/';// здесь необязательно указываем реферер
$page->fetch('http://chtoparsit.ru'); //здесь страницу, информацию с которой коммуниздить
$parse=array(
    'ex1' =>  '#<tr><td><h1 style="padding:0px;margin:0px">(.*?)</h1></td></tr>#si',// (.*?) это данные, которые нам надо выдрать.
    'ex2' =>  '#<span style="font-size:13px;color:\#666">(.*?)</span>#si');
$new=array();
foreach ($parse as $index => $value)
{
    preg_match($value, $source, $matches);
    $new[$index] = preg_replace("#<a.+?>(.+?)</a>#is", "$1", $matches[1]);
}
$ex1 = $new['ex1'];
$ex2 = $new['ex2'];
 
Задачи однопоточных парсеров выше разобрали хорошо.

Хочу сказать пару слов о многопоточных.
Библиотеку для работы с http протоколом - советую использовать эту:

Очень удобно наследоваться от RollingCurlRequest. Там можно реализовать хранение нужных нам в задаче данных. Т.е. позволяет сделать хороший уровень абстракции для поставленной задачи.

В качестве парсинга контента использовать ТОЛЬКО текстовые функции(Для просмотра ссылки Войди или Зарегистрируйся) и МИНИМУМ регулярных выражений. Никакие библиотеки обхода DOM использовать нельзя. При многопоточном парсинге миллионов страниц php ведёт себя ужасно, единственное решение разбивать задание на части, делать возможность продолжения с места разрыва(нормально продумать ведение логов), если нормально продумали логи, будет удобно замечать какие места являются узкими и где валится php и изменять в этих участках код на более простой(например регулярное выражение изменять на текстовые функции и т.д).
 
В качестве парсинга контента использовать ТОЛЬКО текстовые функции(Для просмотра ссылки Войди или Зарегистрируйся) и МИНИМУМ регулярных выражений. Никакие библиотеки обхода DOM использовать нельзя.

То что регулярки не есть хорошо уже сам понял. Везде где мог заменил их строковыми функциями. Они, эти регулярки, ещё и с русскими символами себя чёрте-как ведут. А вот DOM использую, для таких задач как "найти все ссылки со страницы" "найти определённый тег". Даже не знаю как и зачем уходить от Simple HTML Dom в этих задачах.

Пока максимальная задержка (узкое место) - время скачивания материала с сервера. Многопоточность решила бы эту задачу, но пока работаю с однопоточностью. Ибо должно и так хватить.
 
  • Заблокирован
  • #20
То что регулярки не есть хорошо уже сам понял. Везде где мог заменил их строковыми функциями. Они, эти регулярки, ещё и с русскими символами себя чёрте-как ведут.
Вот уж чего не знал. Для русских символов всегда достаточно было сменить кодировку файла на utf-8.Если не сложно - объясните, пожалуйста, поподробнее что ещё вас в регулярках не устраивает, разумеется ещё кроме того, что они работают на долю секунды дольше чем строковые функции? Спасибо!!! DOM.... вообще не представляю как его в html юзать, ведь многим сайтам до xhtml оооочень далеко.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху