Выборочная обработка JavaScript: расшифровка телефонов

Пресет Выборочная обработка JavaScript: расшифровка телефонов 1.0

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

Support

Administrator
Команда форума
A-Parser Enterprise
Начиная с версии 1.1.318 в А-Парсере появилась поддержка JS. Поэтому в данной статье мы рассмотрим пример использования данного функционала, а так же будет показано, как прямо во время выполнения задания можно добавлять и исполнять JS из сайтов.

Итак, задача. Нужно спарсить все номера телефонов из частных объявлений о продаже б/у автомобилей на сайте http://ru.auto.soov.ee/

Открываем и анализируем сайт. В поиске выставляем все нужные параметры и получаем ссылку на результаты. Первым шагом будет парсинг всех ссылок на объявления. На втором шаге мы будем парсить номера из каждого обьявления.

1) Парсим ссылки:
BnNFs.png

Код:
eyJwcmVzZXQiOiJKU190ZWxzIDEiLCJ2YWx1ZSI6eyJwcmVzZXQiOiJKU190ZWxz
IDEiLCJwYXJzZXJzIjpbWyJIVE1MOjpMaW5rRXh0cmFjdG9yIiwiZGVmYXVsdCIs
eyJ0eXBlIjoiZmlsdGVyIiwicmVzdWx0IjpbImludGxpbmtzIiwibGluayJdLCJm
aWx0ZXJUeXBlIjoicmVtYXRjaCIsInZhbHVlIjoib2JqYXZsZW5pamEvLis/XFwu
aHRtbCQiLCJvcHRpb24iOiIifSx7InR5cGUiOiJvdmVycmlkZSIsImlkIjoiZm9y
bWF0cmVzdWx0IiwidmFsdWUiOiIkaW50bGlua3MuZm9ybWF0KCckbGlua1xcbicp
In1dXSwicmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJyZXN1bHRzU2F2ZVRv
IjoiZmlsZSIsInJlc3VsdHNGaWxlTmFtZSI6IiRkYXRlZmlsZS5mb3JtYXQoKS50
eHQiLCJhZGRpdGlvbmFsRm9ybWF0cyI6W10sInJlc3VsdHNVbmlxdWUiOiJzdHJp
bmciLCJxdWVyeUZvcm1hdCI6WyIkcXVlcnkiXSwidW5pcXVlUXVlcmllcyI6ZmFs
c2UsInNhdmVGYWlsZWRRdWVyaWVzIjpmYWxzZSwiaXRlcmF0b3JPcHRpb25zIjp7
Im9uQWxsTGV2ZWxzIjpmYWxzZSwicXVlcnlCdWlsZGVyc0FmdGVySXRlcmF0b3Ii
OmZhbHNlLCJxdWVyeUJ1aWxkZXJzT25BbGxMZXZlbHMiOmZhbHNlfSwicmVzdWx0
c09wdGlvbnMiOnsib3ZlcndyaXRlIjpmYWxzZX0sImRvTG9nIjoibm8iLCJrZWVw
VW5pcXVlIjoiTm8iLCJtb3JlT3B0aW9ucyI6ZmFsc2UsInJlc3VsdHNQcmVwZW5k
IjoiIiwicmVzdWx0c0FwcGVuZCI6IiIsInF1ZXJ5QnVpbGRlcnMiOltdLCJyZXN1
bHRzQnVpbGRlcnMiOltdLCJjb25maWdPdmVycmlkZXMiOltdfX0=
  • В запросе используем макрос {num:1:1000} для перебора всех страниц.
2) Получив список ссылок на объявления, приступаем к парсингу номеров телефонов. Но если посмотреть на код любой страницы с объявлением, можно заметить, что номера телефонов там зашифрованы скриптом:
ZiTpN.png

Благодаря tools.js мы получаем возможность выполнить этот скрипт и получить результат. Для этого нам нужно спарсить сам скрипт и подставить его в tools.js.
fUHyD.png

Код:
eyJwcmVzZXQiOiJKU190ZWxzIDIiLCJ2YWx1ZSI6eyJwcmVzZXQiOiJKU190ZWxz
IDIiLCJwYXJzZXJzIjpbWyJOZXQ6OkhUVFAiLCJkZWZhdWx0Iix7InR5cGUiOiJv
dmVycmlkZSIsImlkIjoiZ29vZENvZGUiLCJ2YWx1ZSI6MjAwfSx7InR5cGUiOiJj
dXN0b21SZXN1bHQiLCJyZXN1bHQiOiJkYXRhIiwicmVnZXgiOiI8dGg+XHUwNDFh
XHUwNDNlXHUwNDNkXHUwNDQyXHUwNDMwXHUwNDNhXHUwNDQyXHUwNDNkXHUwNDRi
XHUwNDM5IFx1MDQ0Mlx1MDQzNVx1MDQzYlx1MDQzNVx1MDQ0NFx1MDQzZVx1MDQz
ZDo8XFwvdGg+PHRkPjxzdHJvbmc+PHNjcmlwdCB0eXBlPVwidGV4dFxcL2phdmFz
Y3JpcHRcIj4oLis/KTxcXC9zY3JpcHQ+IiwicmVnZXhUeXBlIjoicyIsInJlc3Vs
dFR5cGUiOiJmbGF0IiwiYXJyYXlOYW1lIjoiIiwicmVzdWx0cyI6WyJzdGVsIl19
LHsidHlwZSI6Im92ZXJyaWRlIiwiaWQiOiJmb3JtYXRyZXN1bHQiLCJ2YWx1ZSI6
IlslIHRvb2xzLmpzLmNhdGNoV3JpdGUoc3RlbCkgJV0ifV1dLCJyZXN1bHRzRm9y
bWF0IjoiJHAxLnByZXNldCIsInJlc3VsdHNTYXZlVG8iOiJmaWxlIiwicmVzdWx0
c0ZpbGVOYW1lIjoiJGRhdGVmaWxlLmZvcm1hdCgpLnR4dCIsImFkZGl0aW9uYWxG
b3JtYXRzIjpbXSwicmVzdWx0c1VuaXF1ZSI6InN0cmluZyIsInF1ZXJ5Rm9ybWF0
IjpbIiRxdWVyeSJdLCJ1bmlxdWVRdWVyaWVzIjpmYWxzZSwic2F2ZUZhaWxlZFF1
ZXJpZXMiOmZhbHNlLCJpdGVyYXRvck9wdGlvbnMiOnsib25BbGxMZXZlbHMiOmZh
bHNlLCJxdWVyeUJ1aWxkZXJzQWZ0ZXJJdGVyYXRvciI6ZmFsc2UsInF1ZXJ5QnVp
bGRlcnNPbkFsbExldmVscyI6ZmFsc2V9LCJyZXN1bHRzT3B0aW9ucyI6eyJvdmVy
d3JpdGUiOmZhbHNlfSwiZG9Mb2ciOiJubyIsImtlZXBVbmlxdWUiOiJObyIsIm1v
cmVPcHRpb25zIjpmYWxzZSwicmVzdWx0c1ByZXBlbmQiOiIiLCJyZXN1bHRzQXBw
ZW5kIjoiIiwicXVlcnlCdWlsZGVycyI6W10sInJlc3VsdHNCdWlsZGVycyI6W10s
ImNvbmZpZ092ZXJyaWRlcyI6W119fQ==
  • Для работы данного пресета необходимо предварительно прописать функцию catchWrite в tools.js. Для этого вставляем следующий код в JavaScript Editor и сохраняем:
Код:
Tools.prototype.catchWrite = function(script) {
var output = '';
    var document = {
        write: function(s) {
            output += s;
        }
    };

eval(script);

return output;
}
ZXpV6.png
В результате получаем список из почти 13к уникальных телефонов. Средняя скорость парсинга на 300 потоках составила почти 4к запросов в минуту.
FGjxc.png


P.S. Для работы пресетов из этой статьи нужен А-Парсер версии не ниже 1.1.318.
 
функция catchWrite в tools.js. одна для всех сайтов или ее надо для каждого сайта свою составлять?
 
функция catchWrite в tools.js. одна для всех сайтов или ее надо для каждого сайта свою составлять?

одна для всех, но ее надо вызывать с определенным кодом JavaScript который получается регуляркой из HTML
 
Назад
Верх