Очистить динамически загружаемый веб-сайт

Когда я загружаю страницу "http://proxydb.net" с помощью cURL или пытаюсь очистить страницу, тело ответа пусто. Судя по всему, страница загружается динамически с помощью JavaScript.

Какие будут варианты для загрузки обработанного исходного кода?

Я пытался использовать Selenium с помощью драйвера Firefox, но это увеличивает загрузку ЦП до 100 процентов всего за 15 секунд. Я предполагаю, что это нежизнеспособный вариант, особенно для более крупных проектов, которые включают в себя очистку более 100 000 страниц с использованием Selenium.

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


person Sven    schedule 12.04.2018    source источник
comment
Попробуйте использовать python с scrapy-splash для динамической загрузки страниц.   -  person Hari    schedule 12.04.2018
comment
можете ли вы попробовать использовать github.com/MechanicalSoup/MechanicalSoup, лично я не пробовал, но это может помощь. Если это не сработает, возможно, вам придется пойти по пути селена.   -  person Kenstars    schedule 12.04.2018
comment
Спасибо. Я собираюсь попробовать. Есть ли способ оставить веб-браузер открытым при использовании Selenium? В моем случае браузер открывается и затем закрывается для каждого запроса, что сильно потребляет мои системные ресурсы.   -  person Sven    schedule 12.04.2018


Ответы (1)


When I load the page "http://proxydb.net" using cURL, or try to scrape the page, then the response body is empty — потому что этот конкретный веб-сайт использует белый список пользовательских агентов, и если вашего пользовательского агента нет в белом списке, вы просто получите пустую страницу. предположительно все основные веб-браузеры занесены в белый список (Chrome, Internet Explorer, Edge, Safari, Opera и т. д.), но вот конкретный пользовательский агент, который занесен в белый список:

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 

(пользовательский агент Chrome 65, работающий в Windows 7 x64), и, таким образом, это работает:

curl 'http://proxydb.net/' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'

что касается динамической загрузки контента, это обычно делается с помощью XMLHttpRequests или в старом коде iframes.

Apparently, the page is dynamically loaded using JavaScript. - неправильно, эти ребята не загружают список прокси динамически, они встроены прямо в главную страницу (пока вы используете пользовательский агент из белого списка), скрыты как

var q = '42.86.831'.split('').reverse().join('');
var yy = /* */ atob('\x4d\x43\x34\x79\x4d\x54\x67\x3d'.replace(/\\x([0-9A-Fa-f]{2})/g, function() {
    return String.fromCharCode(parseInt(arguments[1], 16))
}));
var pp = (3109 - ([] + [])) /**/ + (+document.querySelector('[data-numr]').getAttribute('data-numr')) - [] + [];
document.write('<a href="/' + q + yy + '/' + pp + '#http">' + q + yy + String.fromCharCode(58) + pp + '</a>');

(который в данном случае вместе с блоком data-numr переводится в 138.68.240.218:3128 - и он на самом деле зашифрован, а ключ дешифрования находится в блоке, похожем на <div style="display:none" data-numr="19"></div>, здесь ключ был 19.)

person hanshenrik    schedule 13.04.2018