zaLinux.ru

Как с помощью PhantomJS отправить POST запрос и получить содержимое страницы


Подробности о том, что такое PhantomJS и как установить эту программу в различные дистрибутивы, смотрите в статье «Как установить PhantomJS на Linux».

С помощью PhantomJS можно не только получать HTML код страниц, но и в командной строке видеть текстовую версию веб-страницы уже после рендеринга — то есть после того, как страница будет полностью построена, в том числе средствами JavaScript. То есть с PhantomJS можно получить текст страницы с результатами работы JavaScript скриптов.

По этой причине одним из вариантов применения PhantomJS является парсинг из веб-страницы, которая обфусцирована с применением различных приёмов — в том числе уже упомянутого JavaScript. В этом случае другие инструменты командной строки не смогут извлечь информацию, поскольку они работают с исходным кодом (HTML), но нужная информация как таковая в HTML отсутствует (точнее, обфусцирована — присутствует, но находится в нечитаемом виде). При этом в веб-браузере пользователь видит текст в обычном виде. Именно таким переходником и является PhantomJS — эта программа позволяет в командной строке видеть то, что пользователи видят в графическом веб-браузере.

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


Итак, предположим, нам нужно получить содержимое страницы http://spys.one/en/free-proxy-list/ после того, как к ней отправлен POST запрос содержащий строку данных 'xpp=5&xf1=0&xf2=0&xf4=0&xf5=0'. То есть если бы мы это делали с помощью cURL, то команда выглядела бы так:

curl http://spys.one/en/free-proxy-list/ -d 'xpp=5&xf1=0&xf2=0&xf4=0&xf5=0'

Как сделать это же самое, но с помощью PhantomJS?

Для этого создайте файл, например, я назову его proxy_parser.js и скопируйте в него:

"use strict";
var page = require('webpage').create(),
        server = 'http://spys.one/en/free-proxy-list/',
        data = 'xpp=5&xf1=0&xf2=0&xf4=0&xf5=0';

page.open(server, 'post', data, function (status) {
    if (status !== 'success') {
        console.log('Unable to post!');
    } else {
        console.log(page.plainText);
    }
    phantom.exit();
});

Для запуска выполните команду:

phantomjs proxy_parser.js

Как можно видеть — получена текстовая версия страницы. Самое главное — обфусцированные данные (на этом сайте это сделано с номерами портов) представлены в нормальном, читаемом виде, пригодном для простого парсинга.

На основе решения с сайта: https://stackoverflow.com/questions/40085601/post-request-with-phantomjs


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *