Не в первый раз ко мне обращаются с вопросом как распарсить/сграбить то или сё.
Плагиат — дело конечно не доброе, но порой необходимое.
Для примера рассмотрим задачу воровства кейводров 🙂
По хорошему кеи добываются приблизительно так (если конечно не покупать готовую базу) — сначала грабим с какого нить подходящего ресурса (вордтрекер, увертюра и т.д. для англоязычных кеев) (директ, майл для русскоязычных) в глубь — это поисковые запросы с указанным кеем 2х, 3х словники и в ширь — это кеи синонимы или просто кеи, которые часто ищут вместе с исходым. Потом вся эта куча (либо только однословник) чекается на биды и возможно конкуренцию. Ненужное выкидываем, по остальному лепим доры.
Но можно пойти и другим путём — ищем дор, а лучше сетку доров. И распарсиваем уже готовые коммерческие кеи 🙂 Как то делать было нечего — за день работы с разных сеток скоммуниздил 500 тыс уникальных русских кеев. Ру доры конечно же лучше искать в Раме 🙂
Ну и скриптик в студию:
<?php
//error_reporting(E_ALL); // врубал дя отладки
set_time_limit(0); // чтоб успело дограбить всё
ignore_user_abort(); // грабить не смотря на ошибки клиента
fp = fopen(«./keys.out»,»w+»); // складываем награбленное в keys.out
for($i=0;true;$i++) { //цикл для счётчика паг
$buf = file(‘http://xxxxxxx.ru/?p=’.$i); // конкретный дор я решил не светить
preg_match(«!\<title\>(.*?)\<\/title>!ism»,$buf[3],$match); // кей в данном случае сидел только в тайтле, причем в анкорах внутренних линков кеев не было 🙂
$key = trim($match[1],» \r\n\t»); //режем переводы строк и прочую хуйню
echo $i.» «.$key; flush(); //выводим на экран процесс грабинга (можно убрать), в принципе нужно только для начала — как только процесс пошел браузер можно закрывать
if (empty($key)) break; // условие останова (для этого конкретного дора)
fputs($fp,$key.»\n»); // пишем в файл выдранный кей
}
fclose($fp); // закрываем файл?>
Скрипт я привел Очень простой — так сказать «5ти минутка» — ни обработки ошибок, ни через проки (на случай если не дают с одного айпишника грабить), ни многопоточный (если нужна максимальная скорость) даже пагу и ту через file дёргаю (по идее после получения кея дальше сокет можно закрывать). Чисто дёрнуть дор или ещё чего нибудь — для промышленного парсинга данный скрипт явно не подойдет. Вообще имхо, для промышленного, нужно на сях писать — и быстро и память не жрет и с многопоточностью всё в порядке (хотя в былые времена, когда шпамилок еще не продавали, мой скриптик-шпамила довольно шустро и на php работал).
Если интересно можно будет поднакрутить до многопоточности и работы через прокси 🙂
Ну и конечно не забываем, что приведенный скрипт не универсален — под каждую задачу затачиваем уже сами (формат страниц, выдирание нужного контента и т.д.)
P.S.
Кстати сегодня с новой офлайн работы первый раз на свой сервачек цеплялся — возникли каки то непонятные проблемы с пробросом фтп трафика — решил сильно не заморачиваться (разберусь как время будет)- поставил SFTPDrive — очень забавная софтина — в винду по ssh протоколу мапит виртуальный драйв с сервака — если не нужно расшаривать доступ нескольким юзерам (работаешь на серваке монопольно) то имхо — очень удобно! ФТП сервак на машинке вообще поднимать и настраивать не нужно !
И, на последок, пару рекламных ссылочек:
- Производим срочный выкуп квартир за короткие сроки.
- Поможем срочно продать квартиру в Москве через агентство.
И для подтверждения авторства моего блога, секретный код: 2004163.53afaf17fa3bb99abb5f0a8b9a97fe6a.1210728395.d4c9e1895936ca00a60a1aedf7f8b9d1
36 комментариев на «“Очень простой php парсер”»
Было бы интересно узнать насчет грамотной многопоточности и качественной работы с прокси (проверка, обработка ошибок и так далее)
Вау!!! Какие люди читают мой скромный блог ! не ожидал 🙂
Ну а на счёт многопоточности и работы с проксями буду постить — насколько это будет грамотно — судить не мне (походу договорился я)
[…] Для примера рассмотрим задачу воровства кейводров. По хорошему кеи добываются приблизительно так (если конечно не покупать готовую базу) — сначала грабим с какого нить подходящего ресурса (вордтрекер, увертюра и т.д. для англоязычных кеев) (директ, майл для русскоязычных) в глубь — это поисковые запросы с указанным кеем 2х, 3х словники и в ширь — это кеи синонимы или просто кеи, которые часто ищут вместе с исходым. Потом вся эта куча (либо только однословник) чекается на биды и возможно конкуренцию. Ненужное выкидываем, по остальному лепим доры. Дальше […]
[…] Очень простой php парсер […]
На многопоточность было бы очень интересно посмотреть 🙂
Запросы через прокси, наверное, CURL’ами будешь реализовывать?
Если будешь конечно этим заморачиваться…
Спасибо, щас нужно будет его протестировать как работает !
А я и копипастом могу…
Я кстати тоже чиркнул пару строк о парсинге на РНР:
http://seovirus.ru/parsing-legko-i-dostupno-master-klass-ot-seovirusa.html
это такой… своеобразный небольшой туториал получился..
Спасибо
[…] этого поста о парсерах рекомендую посмотреть здесь — очень простое решение с поиском готовых, уже кем-то […]
[…] опубликована Блог GTAlex — деньги из паутины. Пожалуйста, оставляйте комментарии […]
Было бы крайне интересно узнать:
1. Как парсить странички,на которые попадает пользователь,если авторизуется.
2. Как подставлять куки.
3. Что все-таки с прокси и другими хитростями.
Заранее признателен.
Я теперь хоть разобрался, что за слово такое «парсить», а то ну никак не въезжал. А проверка обратных ссылок тоже через парсер делается?
Просто в напарсенном массиве ищешь ссылки на себя
Глупый вопрос: а нельзя Php код парсить?
webzanie.info, нельзя, так как РНР исполняется на сервере, а посетителю в браузер выдаётся только результат работы РНР скрипта.
Claygod, вот! Это все знают, а можно ли как-нибуль php код вытащить, или это под силу только опытным хакерам?
Только через хаканье сервера
Чёт не запахал код
Пишет:
Parse error: syntax error, unexpected ‘!’ in T:\home\red.ru\www\pars.php on line 15
Если хотите плагиет в промышленных масштабах, то относительно универсальный парсер romb.ru есть. Спасибо!
Dominatos, когда скопируешь код в редактор, замени все « на нормальные кавычки.
Здесь вордпресс их заменяет на другие.
пыталасб разобраться, но ничего не вышло
Что именно не понятно то ?
С момента моего вопроса к этой статье (22 июля 2008 года) прошло 8 месяцев.
На вопрос ответа так и не получил, но зато сам во всем чудесно разобрался.
Для удачного парсинга есть определенный набор средств:
1. cURL — и куки подставит, и через прокси подрубится, и авторизуется куда надо. Мега-вещь.
2. DOM — регулярки — это зло. Используйте DOM для разбора документа.
3. XPath — удобный и быстрый способ добраться до нужного элемента страницы.
Многие могут сказать — DOM’ом парсить удобно только валидные html документы. Нифига. Невалидные тоже легко.
4. Tidy — инструмент, который позволит из любого невалидного документа сделать валидный. Идет как часть PECL.
Ну в принципе и всё. Может как-нибудь напишу много интересных статей о том, как распарсить всё и вся в интернете =)
хм …
сорри GiN что я так и не дал ответа
22 июля — мой день рождения, возможно именно поэтому твои вопросы остались без ответа 😉
сначала отложил — а потом и забыл …
а возможно даже к лучшему — то до чего доходишь сам так сказать с потом и кровью
дает гораздо более лучший результат, чем если бы я тебе сухо ответил «юзай CURL»
кстати я именно курлом все достаю где нужна авторизация и пр. — в общем полная имитация работы пользователя (в принипе можно на сокетах организовать свой подобный класс).
про DOM регулярки ничего не слышал — мне хватает обычных регулярных выражений.
XPath тоже не юзал — мне для спамилки как то понадобился инструмент для парсинга форм со всеми её элементами — нашел довольно неплохой класс (на блоге уже как то публиковал его)
а дорабатывать страничку Tidy перед парсингом — идея отличная, сам как то недопер
Ну раз был д.р. — то все понятно.
DOM и Xpath — удобные средства для того, что бы быстро добраться до нужного элемента.
А часто бывает что код не валидный и DOM отваливается. Говорит что ничего не может сделать, вот тут Tidy и нужен. А так он бесполезен в принципе.
Регуляркам плевать что в них пихать =)
красивы пример, учитывая что он такой коротки и еще работает, по поводу многопоточности в парсере написано на http://www.deepestweb.com/?p=161, правда части 2 я там не нашел, но может и появится.
Вопрос такой:
можно ли получить в переменную html код дивов, содержимое которых вставляется яваскриптом , а яваскрипт берет эти данные с сервера посредством аякс.
т.е те данные которые грузятся аяксом с сервера по умолчанию, при открытии определенног урла.
В браузере они видны, а в исходном коде пустые дивы 🙁
Самое обсуждаемое на блогах:
Светлана Бахмина освобождена по УДО
Динара Сафина -теннисистка номер 1 в мире
Погиб музыкант группы "Любэ" Анатолий Кулешов
за пример парсера спасибо, для новичков пример в самый раз.
Классный парсер, возьму его за основу.
Какие синонимайзеры посоветуете для уникализации контента ? Желательно на php .
учусь парсить
спасибо за пример
Статья о том как написать парсер сайта http://webdevart.ru/articles/entry,pishem-parser-sayta
Код не работает. Перепечатал вручную символ в символ.
Выдает: Notice: Undefined offset: 1 in…
Товарищ! Надо было БОЛЬШУЩИМИ буквами на видном месте написать, что скрипт заточен под конкретный дор и с другими сайтами он будет работать только при наличии некоторых совпадений в коде страниц. 1,5 часа из-за этого потерял, хотя, конечно, новичку в ПХП это полезно. Спасибо за скрипт.