Мы все знаем, что пользовательский интерфейс (UI) является самой важной частью любого программного обеспечения. Таким образом, слово "безголовый" в "безголовом браузере" означает, что им действительно не хватает одного ключевого элемента, а именно графического пользовательского интерфейса (GUI).
Это означает, что сам браузер может работать в фоновом режиме (подключаться к целевому сайту, загружать/выгружать документы, отображать информацию и т. д.), но вы не видите ничего.
Вместо этого инженеры по тестированию программного обеспечения предпочитают использовать такие интерфейсы, как "командная строка", где команды обрабатываются в виде текстовых строк.
Как обнаружить безголовый Chrome?
Вам понадобится анти-детекционный браузер.
Puppeteer — это открытая библиотека Node.js, разработанная Google, которая предоставляет высокоуровневый API для управления безголовым Chrome или Chromium браузером. Вот 7 преимуществ, которые объясняют, почему разработчики предпочитают использовать его для веб-скрапинга.
Puppeteer управляет безголовой версией Google Chrome, что означает, что он может работать без графического пользовательского интерфейса. Это позволяет быстрее и эффективнее выполнять скрапинг, поскольку уменьшается нагрузка, связанная с рендерингом полного окна браузера.
Многие современные сайты сильно зависят от JavaScript для динамической загрузки контента. Традиционным инструментам скрапинга часто трудно работать с такими сайтами. Однако Puppeteer может выполнять JavaScript, как настоящий браузер, обеспечивая полную загрузку и доступность всего динамического контента для скрапинга.
Puppeteer предоставляет высококачественный API, который позволяет точно контролировать браузер. Это включает в себя такие действия, как нажатие кнопок, заполнение форм и навигация между страницами, что особенно важно для скрапинга сложных сайтов.
Одна из функций Puppeteer — возможность автоматически делать скриншоты. Это полезно для отладки и проверки правильности загрузки контента перед выполнением скрапинга.
Puppeteer поддерживает кросс-браузерное тестирование, что означает, что вы можете тестировать и скрапировать сайты в разных браузерах (например, Chrome и Firefox). Эта гибкость обеспечивает надежность ваших скриптов скрапинга и их способность работать в различных сетевых средах.
Puppeteer имеет сильное сообщество и хорошо интегрируется с другими инструментами, такими как TeamCity, Jenkins и TravisCI. Это облегчает поиск поддержки и расширений для улучшения задач скрапинга.
Puppeteer может имитировать взаимодействия с пользователем, такие как движения мыши и ввод с клавиатуры. Это затрудняет обнаружение и блокировку действий скрапинга, поскольку эти взаимодействия выглядят более человеческими.
Лучшее решение для веб-скрапинга - бесплатный Nstbrowser
Используйте множество решений для разблокировки сайтов и обхода анти-ботовых проверок.
Беспрепятственный доступ к 99.9% незаблокированных сайтов.
Есть ли у вас хорошие идеи или вопросы о веб-скрейпинге и Browserless?
Посмотрите чем делятся другие разработчики в Discord и Telegram!
Теперь я покажу вам, как выполнить скрапинг с помощью Nstbrowserless!
Что это значит?
Другими словами, нам нужно использовать Nstbrowser, анти-детекционный браузер, и настроить безголовый режим в Docker-контейнере для скрапинга веб-данных.
Для примера возьмем скрапинг ссылок на видео на странице Explore на главной странице TikTok:
Вам также может понравиться: Как использовать Playwright для скрапинга аватаров.
Нам нужно:
a
с атрибутом data-e2e="nav-explore"
.Кликните на элемент выше, чтобы перейти на страницу предварительного просмотра для дальнейшего анализа.
Мы можем увидеть, что целевые данные находятся в элементе списка с атрибутом data-e2e="explore-item-list"
, который содержит элементы div
.
Каждый элемент видео обозначается data-e2e="explore-item"
, и нужная нам ссылка на видео находится в атрибуте href тега a
внутри div
.
После успешного определения нужных элементов можно переходить к скрапингу:
# Загрузка образа
docker pull nstbrowser/browserless:0.0.1-beta
# Запуск nstbrowserless
docker run -it -e TOKEN=xxx -e SERVER_PORT=8848 -p 8848:8848 --name nstbrowserless nstbrowser/browserless:0.0.1-beta
Теперь нужно настроить Nstbrowser на безголовый режим
import json
from urllib.parse import urlencode
from pyppeteer import launcher
async def main():
config = {
"once": True,
"headless": True, # поддерживает: true или false
"autoClose": True,
"args": ["--disable-gpu", "--no-sandbox"], # Параметры браузера должны быть в виде списка
"fingerprint": {
"name": 'tiktok_scraper',
"platform": 'windows', # поддерживает: windows, mac, linux
"kernel": 'chromium', # поддерживает только: chromium
"kernelMilestone": '120',
"hardwareConcurrency": 8, # поддерживает: 2, 4, 8, 10, 12, 14, 16
"deviceMemory": 8, # поддерживает: 2, 4, 8
},
}
query = {
'config': json.dumps(config)
}
browser = await launcher.connect(
browserWSEndpoint=f"ws://127.0.0.1:8848/ws/connect?{urlencode(query)}"
)
page = await browser.newPage()
await page.goto('chrome://version')
await page.screenshot({'path': 'chrome_version.png'})
await browser.close()
if __name__ == "__main__":
import asyncio
asyncio.run(main())
После выполнения этого кода вы можете увидеть следующую информацию на странице chrome://version
:
Добавление параметра --headless
в команду запуска ядра указывает, что ядро работает в безголовом режиме.
Полный код:
import json
from urllib.parse import urlencode
from pyppeteer import launcher
async def main():
config = {
"once": True,
"headless": True, # поддерживает: true или false
"autoClose": True,
"args": ["--disable-gpu", "--no-sandbox"], # Параметры браузера должны быть в виде списка
"fingerprint": {
"name": 'tiktok_scraper',
"platform": 'windows', # поддерживает: windows, mac, linux
"kernel": 'chromium', # поддерживает только: chromium
"kernelMilestone": '120',
"hardwareConcurrency": 8, # поддерживает: 2, 4, 8, 10, 12, 14,
16
"deviceMemory": 8, # поддерживает: 2, 4, 8
},
}
query = {
'config': json.dumps(config)
}
browser = await launcher.connect(
browserWSEndpoint=f"ws://127.0.0.1:8848/ws/connect?{urlencode(query)}"
)
page = await browser.newPage()
try:
await page.goto('https://www.tiktok.com/explore')
await page.waitForSelector('[data-e2e="explore-item-list"]')
await page.waitFor(3000)
ul_element = await page.querySelector('[data-e2e="explore-item-list"]')
li_elements = await page.querySelectorAll('[data-e2e="explore-item"]')
hrefs = []
if li_elements:
s = []
for li in li_elements:
a_element = await li.querySelector('[data-e2e="explore-item"] div a')
if a_element:
href = await page.evaluate('(element) => element.getAttribute("href")', a_element)
if href:
print(href)
hrefs.append(href)
finally:
await browser.close()
if __name__ == "__main__":
import asyncio
asyncio.run(main())
Результат скрапинга:
На данный момент мы завершили операцию по скрапингу ссылок на видео TikTok с использованием Nstbrowserless. После получения ссылок вы можете выполнить любые нужные действия, например, сохранить их, скачать видео или перенаправить на воспроизведение.
Конечно, это был очень простой пример. Если вы хотите скрапировать больше данных, используйте Nstbrowser для исследования и операций, чтобы легко выполнить эту задачу.
Хотя безголовый браузер важен для веб-скрапинга и автоматизации, он не всегда идеален. Перед использованием тщательно рассмотрите следующие преимущества и недостатки:
Безголовый Chrome предоставляет множество преимуществ для процесса веб-скрапинга, и его можно настроить для автоматизации всего несколькими строками кода. Он минимизирует использование памяти, идеально обрабатывает JavaScript и работает в среде без GUI.
В этом руководстве вы узнали:
Кроме того, Nstbrowser позволяет легко избежать обнаружения ботов, разблокировать сайты и упростить процесс веб-скрапинга и автоматизации.