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

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

Какие были бы варианты, чтобы по-прежнему загружать визуализированный исходный код?

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

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

Попробуйте использовать python с scrapy-splash для динамической загрузки страниц

Hari 12.04.2018 11:43

Можете ли вы попробовать использовать github.com/MechanicalSoup/MechanicalSoup, я лично не пробовал, но это может помочь. Если это не сработает, возможно, вам придется пойти по пути селена.

Kenstars 12.04.2018 11:44

Спасибо. Я попробую. Есть ли способ оставить веб-браузер открытым при использовании Selenium? В моем случае браузер открывается, а затем закрывается для каждого запроса, что сильно потребляет мои системные ресурсы.

Sven 12.04.2018 11:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
727
1

Ответы 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 или в более старом коде, iframe.

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>');

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

Другие вопросы по теме