Q
Q
QQ2016-11-30 18:13:42
Parsing
QQ, 2016-11-30 18:13:42

How to implement a parser / grabber of a secure site?

Hello.
There is a site that tracks bots quite well and introduces a restriction accordingly. Actually, only a mechanism is needed to get the site page for saving, the parsing itself has already been implemented.
The site instantly blocked bots that do not accept cookies, but now blocks almost all requests.
The solution was found in the use of PhantomJS, however, page loading can reach 1-2 seconds, which is quite a long time, given that millions of pages need to be saved.
Are there any other options?

Answer the question

In order to leave comments, you need to log in

8 answer(s)
D
Dmitry, 2016-11-30
@botaniQQQ

Well, if a person sits from one IP and they don’t ban him, then you need to make it as if a “person” is walking around the site.
To do this, I propose to recall the well-known problem "baner roll". There are N banners. They must be scrolled each 1 time and in K seconds.
In your case, URLs act as banners. Divide K seconds by T url-s and get the time for each link. But. In order to introduce non-determinism, we do this at different time intervals before the next iteration of parsing.
Look closely at the output:

site.ru/?page1
site.ru/?page2
...
site.ru/?pageN .
See?
In this solution, a cycle is immediately visible and this may be sufficient reason for recognizing parsing.
As a rule, people write "vlob" because they don't want to think with their heads!
It is necessary to make a "walk" around the site like this: site.ru/?page15, site.ru/?page179, site.ru/?page1, ... One page was viewed in 5 seconds, and the other in 1 minute, etc. Watch yourself, how do you go to the sites? Do you manage to read an article in 1-2 seconds? I assure you you are randomly browsing the site. Either in personal messages, then in favorites, then look into the search, then from the search results for some article. So bring randomness into parsing.
The final conclusion is that you need to choose between:
  • If you want fast parsing, then more proxies
  • If you want from one IP, you will have to sacrifice work time

Александр Аксентьев, 2016-11-30
@Sanasol

Каждый день люди заходят на тостер и скидывают в ответах парсеры на миллионы страниц, да такие чтоб не банило.
Спарсить миллион страниц с сайта который ОЧЕНЬ не хочет этого это довольно таки сложная работа.
Либо не сложная, но долгая и/или дорогая.
Зачастую даже на этом можно построить бизнес, если вдруг сумеешь спарсить хоть что-то полезное и не забаниться.
Пока вы не понимаете адекватно сложность и объем этой работы и/или не можете её сделать - не стоит за это браться.
Короче используйте то что есть или платите деньги тем кто это умеет лучше.
Это не пара строк кода на тостере ответить.

X
xmoonlight, 2016-11-30
@xmoonlight

Есть система парсинга "Round-Robin".
Допустим, есть 3 сайта и на них туча URL.
Создаётся список урлов, чтобы временной интервал между парсингом URL с одного сайта был не менее 30 секунд.
Т.е.: Сайт1->Сайт2->Сайт3->Сайт1->Сайт2->Сайт3 и т.д.
Если быстрее происходит - ЖДЁТЕ!
После парсинга каждых 5-6 урлов (сессию и user-агента - сохраняем на протяжении парсинга этого интервала) на одном сайте - меняем IP также по "Round-Robin".
В итоге - Вы не создаёте нагрузки и не мешаете удалённому сайту нормально функционировать.

Антон Л, 2016-12-01
@antonecma

Общий концепт может быть таким :
1. Использовать phantomjs, через локальный прокси.
2. Локальный прокси обеспечивает сохранение всех запросов к требуемой странице в формате HAR.
3. Поиск общих последовательностей запросов и кук, на основании нескольких HAR.
4. Отделение кук и параметров устанавливаемых javascript.
5. Поиск скриптов на странице, которые занимаются установкой значений указанных в п.4, с целью дальнейшего их исполнения в виртуальной машине javascript.
На выходе имеем запросы которые необходимо выполнить, список очевидных заголовков, набор функций позволяющих при исполнении javascript, вычислить дополнительные заголовки. Теперь прогоняем весь этот набор через curl (или что то подобное) как и при обычном парсинга.
Главная суть это виртуальная машина javascript и возможность найти то место(функцию) которую ей надо передать.

C
cultura, 2016-12-01
@cultura

Решение было найдено в использовании PhantomJS, однако загрузка страницы можно достигать 1-2 сек, это довольно долго, с учетом того, что нужно сохранять миллионы страниц.

Никаких хитрых антиботовых механизмов там нет.
Подделаться под бота Яндекса не получится - ваш IP должен из подсети Яндекса и резольвится по их DNS.
У Гугля аналогично.
А на остальных ботов они могут выставить банальное ограничение - не более 30 страниц в минуту, например.
Вам же в явном виде отказали и закрыли перед носом дверь. А вы - через окно полезли.

D
Dimonchik, 2016-11-30
@dimonchik2013

Яндекс знает паблик прокси, надо частные или как повезет
но если вы без кук его парсить начинали, думаю, еще есть куда расти перед масспрокси

+
++++ -----, 2016-12-01
@whiski80

function getSslPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}

H
hOtRush, 2016-12-08
@hOtRush

phantomjs is needed only in one case - if the site does not work without JS. in all other cases, there are enough proxies, of which tens of thousands are now even in the public domain or for little money.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question