Пример написания собственного парсера

Пресет Парсер dogpile.com 1.0

Доступно владельцам лицензии
  • Автор темы Автор темы Force68
  • Дата начала Дата начала

Force68

A-Parser Enterprise License
A-Parser Enterprise
День добрый,
Forbidden, помогите пожалуйста сделать парсет для парсинга ссылок
по запросу с dogpile.com,
с помощью Net::HTTP, что то не понимаю, как отфильтровать ссылки с выдачи,
и сделать листинг страниц.
 
ehcGi.png



Небольшое пояснение
  • В качестве Query format(Формат запроса) указываем http://www.dogpile.com/search/web?qsi=${pagenum}&q=${query}&fcop=results-bottom&fpid=2 - вместо ${pagenum} будет подставляться необходимый номер страницы, в ${query} будет подставляться наш запрос
  • Добавляем опцию Use pages, указываем начало с первой страницы, всего 100 страниц, с шагом в 10(1, 11, 21 и т.п.)
  • Добавляем опцию Parse custom result - основная часть составления парсера, здесь указываем регулярное выражение <div class="searchResult webResult">.*?<a class="resultTitle".*?ru=(.*?)&amp , выставляем флаги sg(s - точка включает в себя перенос строки, g - глобальный поиск, нам нужны все ссылки на страницы). Сохраняем результат в массив serp в элемент link - когда мы парсим несколько однотипных элементов(флаг g регулярного выражения) - мы сохраняем результат в массив, $1 означает первую группировку регулярного выражения
  • Теперь изменим Result format(Формат результата) - укажем $serp.format('$link\n') - вывести все элементы link массива serp через новую строку - в результате получим список всех ссылок
  • Добавим опцию Check next page - проверка на существование следующей страницы, укажем регулярное выражение <li class="paginationNext"> - если данное регулярные выражение не выполниться на текущей странице то парсинг завершиться
В результате мы получим искомый список ссылок, за одним исключением - ему необходимо сделать uri decode, встроенной функции в парсере пока нет

Код пресета(для импорта необходимо нажать на кнопку с синей стрелкой в Add Task):
eyJwcmVzZXQiOiJkZWZhdWx0IiwidmFsdWUiOnsicHJlc2V0IjoiZGVmYXVsdCIs
InBhcnNlcnMiOltbIk5ldDo6SFRUUCIsImRlZmF1bHQiLHsidHlwZSI6Im92ZXJy
aWRlIiwiaWQiOiJxdWVyeWZvcm1hdCIsInZhbHVlIjoiaHR0cDovL3d3dy5kb2dw
aWxlLmNvbS9zZWFyY2gvd2ViP3FzaT0ke3BhZ2VudW19JnE9JHtxdWVyeX0mZmNv
cD1yZXN1bHRzLWJvdHRvbSZmcGlkPTIifSx7InR5cGUiOiJjdXN0b21SZXN1bHQi
LCJyZXN1bHQiOlsicGFnZXMiLCJkYXRhIl0sInJlZ2V4IjoiPGRpdiBjbGFzcz1c
InNlYXJjaFJlc3VsdCB3ZWJSZXN1bHRcIj4uKj88YSBjbGFzcz1cInJlc3VsdFRp
dGxlXCIuKj9ydT0oLio/KSZhbXAiLCJyZWdleFR5cGUiOiJzZyIsInJlc3VsdFR5
cGUiOiJhcnJheSIsImFycmF5TmFtZSI6InNlcnAiLCJyZXN1bHRzIjpbImxpbmsi
XX0seyJ0eXBlIjoib3ZlcnJpZGUiLCJpZCI6ImZvcm1hdHJlc3VsdCIsInZhbHVl
IjoiJHNlcnAuZm9ybWF0KCckbGlua1xcbicpIn0seyJ0eXBlIjoib3B0aW9ucyIs
ImlkIjoidXNlUGFnZXMiLCJ2YWx1ZSI6IjEiLCJhZGRpdGlvbmFsIjp7InBhZ2Vz
U3RlcCI6IjEwIiwicGFnZWNvdW50IjoiMTAwIn19LHsidHlwZSI6Im9wdGlvbnMi
LCJpZCI6ImNoZWNrTmV4dFBhZ2UiLCJ2YWx1ZSI6IjxsaSBjbGFzcz1cInBhZ2lu
YXRpb25OZXh0XCI+In1dXSwicmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJy
ZXN1bHRzU2F2ZVRvIjoiZmlsZSIsInJlc3VsdHNGaWxlTmFtZSI6IiRkYXRlZmls
ZS5mb3JtYXQoKS50eHQiLCJhZGRpdGlvbmFsRm9ybWF0cyI6W10sInJlc3VsdHNV
bmlxdWUiOiJubyIsInF1ZXJ5Rm9ybWF0IjpbIiRxdWVyeSJdLCJ1bmlxdWVRdWVy
aWVzIjpmYWxzZSwic2F2ZUZhaWxlZFF1ZXJpZXMiOmZhbHNlLCJpdGVyYXRvck9w
dGlvbnMiOnsib25BbGxMZXZlbHMiOmZhbHNlLCJxdWVyeUJ1aWxkZXJzQWZ0ZXJJ
dGVyYXRvciI6ZmFsc2V9LCJyZXN1bHRzT3B0aW9ucyI6eyJvdmVyd3JpdGUiOmZh
bHNlfSwiZG9Mb2ciOiJubyIsImtlZXBVbmlxdWUiOiJObyIsIm1vcmVPcHRpb25z
IjpmYWxzZSwicmVzdWx0c1ByZXBlbmQiOiIiLCJyZXN1bHRzQXBwZW5kIjoiIiwi
cXVlcnlCdWlsZGVycyI6W10sInJlc3VsdHNCdWlsZGVycyI6W10sImNvbmZpZ092
ZXJyaWRlcyI6W119fQ==
 
Последнее редактирование модератором:
Forbidden, спасибо большое за подробный ответ,
теперь принцип понятен.
 
Назад
Верх