Как стать автором
Обновить

Комментарии 17

Почему бы вместо cheerio не инжектить на страницу внутри puppeteer jQuery и не тащить сразу финальные данные оттуда?

Можно ещё проще: после
await page.goto('https://news.ycombinator.com/');
пишем
const titles = await page.$$eval('.storylink', links => links.slice(0, 5).map(link => link.textContent));

и получаем то, что нужно без jQuery и Cheerio.
Мне кажется, чтобы взять достаточно данных там, где этого не хотят и фильтруютд по адресу, 4 порта никак не хватит
В чем разница между прямым запросом на страницу, и получение её HTML в response, и открытии этой страницы в браузере, с последующим копированием HTML?
Я как бы не спец в этом, но ваша страница может быть динамической и подгружаться на лету. Вы можете её этим способом всю получить. А так, пришлось бы получать её из каких-нибудь веб-сервисов или по частям.
Тут дело в том, что при попытке получить HTML-код страницы, которая является SPA (Single Page Application), вы, скорее всего, в получите в ответ страницу, в теле которой будет только что-то вроде такого:
<script src="app.js"></script>


А если брать содержимое страницы из браузера – то получим уже нормальный HTML.
В статье, кстати, про это говорится
Так это означает что это приложение общается по API и весь вопрос в том расковыривать ли вам API, или оно так сложно что легче парсить html
Здравствуйте!

Спасибо за статью. Я по скрапингу не очень, поэтому появился вопрос. Если описываемым способом заходить на такой сайт на JS: 1xstavka.ru/en/live/Basketball, произойдет рендеринг html, чтобы, например, сохранить его как файл на диске?
  const content = await page.content();
И в этой переменной как раз и будет уже готовый HTML из браузера.

Спасибо!

Сталкивался с похожей проблемой, но Tor оказался слишком медленным — нужно было скрейпить миллионы запросов.

Возможная альтернатива Тору — покупка VPN (есть позволяющие до 8 одновременных коннектов) и запуск массива Docker контейнеров, подключающихся по OpenVPN и заворачивающих трафик в SOCKS.

Также, в большинстве случаев headless browser может быть избыточен, сессии в библиотеке requests на питоне (уверен, есть похожая библиотека для JS) + подмена User-Agent и Referrer почти всегда решают задачу. Конечно, часто на настройку этого требуется больше времени, однако и производительность существенно выше.

Tor не только очень медленный, но ещё и IP адреса выходных нодов часто бывают забанены на сайте или закрыты какой-нибудь гугл капчой.

А у вас не возникало ситуации, когда надо получить выборку релевантную местоположению? Если не использовать headless browser, есть какой-то способ тот же гугл убедить, что ты находишься в конкретном городе?

Хмм, раз у сайта есть API, то почему бы его не юзать напрямую, минуя при этом headless браузер?

Все зависит от задачи. Если мы должны парсить конкретный сайт, вы правы.
Но есть случаи когда нужно парсить любой веб-сайт и извлекать от туда к примеру контактный данные, в этом случаи без хедлес браузера не обойтись.

Бывает ключик генерится на клиенте обфусцированным алгоритмом слегка

Никто и не использует headless браузер просто потому, что сайт это SPA и у него есть API. headless для тех случаев, когда собрать аналогичный запрос руками почти нереально (хеши/подписи в параметрах запросов итд), или когда на сайте присутствуют защиты от парсинга, основанные на выполнении js.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий