Как сканировать сайт: пошаговое руководство по сканированию с помощью Python и JavaScript и 12 советов, как избежать блокировки в 2023 году

Увлекательное путешествие в мир веб-краулинга может быть одновременно захватывающим и непростым: в поисках ценных данных приходится пробираться по запутанным закоулкам интернета. В необъятной цифровой вселенной веб-краулинг стал важным навыком, позволяющим эффективно собирать информацию, находить полезные сведения и ориентироваться во всё расширяющейся Всемирной паутине.

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

От динамичного мира сайтов на JavaScript до простоты и мощи Python — мы познакомим вас с множеством советов и приёмов, которые помогут сделать ваше путешествие по веб-страницам плавным, эффективным и беспрепятственным.

Содержание

Пристегнитесь и приготовьтесь отправиться в увлекательное путешествие по захватывающему миру веб-краулинга!

Веб-краулинг и веб-скрейпинг

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

Ключевые различия

Проще говоря, веб-краулингом занимаются поисковые системы: они перемещаются по интернету в поисках доступной информации и переходят по всем доступным ссылкам. Цель этого общего процесса — собрать как можно больше информации (или даже всю информацию) с определённого сайта. По сути, именно так работает Google: он просматривает всю веб-страницу и индексирует все доступные данные.

Веб-скрейпинг, напротив, используется, когда необходимо скачать собранную информацию. Веб-скрейпинг (также называемый извлечением веб-данных) — это более целенаправленный процесс. Настраивая команды и используя прокси для скрейпинга, можно извлекать определённые данные с целевого сайта. Затем результаты можно скачать в подходящем формате, например JSON или Excel.

В некоторых случаях веб-краулинг и веб-скрейпинг используются для достижения одной цели, фактически становясь первым и вторым этапами процесса. Объединив эти методы, можно с помощью краулера собрать большие объёмы информации с крупных сайтов, а затем извлечь и скачать нужные данные с помощью скрейпера.

4 стратегии веб-краулинга

Как правило, веб-краулеры посещают лишь часть веб-страниц в пределах выделенного им бюджета, который может определяться такими факторами, как максимальное количество страниц на домен, глубина обхода или его продолжительность.

Многие сайты содержат файл robots.txt, в котором указано, какие разделы сайта можно обходить, а какие закрыты для доступа. Кроме того, есть sitemap.xml — более подробный файл, чем robots.txt: он указывает ботам, по каким путям следует выполнять обход, и предоставляет дополнительные метаданные для каждого URL.

К распространённым вариантам использования веб-краулеров относятся:

  1. Поисковые системы, такие как Googlebot, Bingbot и Yandex Bot, собирают HTML-код значительной части интернета и индексируют данные, чтобы их было легко найти.
  2. Инструменты SEO-аналитики собирают не только HTML-код, но и метаданные, например время и статус ответа, чтобы выявлять неработающие страницы и отслеживать ссылки между доменами для анализа обратных ссылок.
  3. Инструменты мониторинга цен обходят сайты электронной коммерции, чтобы находить страницы товаров и извлекать метаданные, в частности цены. Затем эти страницы товаров периодически посещаются повторно.
  4. Проект Common Crawl поддерживает общедоступный архив данных веб-краулинга, например архив за май 2022 года, содержащий 3.45 миллиарда веб-страниц.

Как сканировать сайты на JavaScript

Сканирование сайтов на JavaScript может быть сложнее, чем сканирование статических HTML-страниц, поскольку контент часто загружается и изменяется с помощью кода JavaScript. Для сканирования таких сайтов нужен безголовый браузер, который может выполнять JavaScript и отображать содержимое страницы. Один из популярных вариантов для этой задачи — сочетание библиотеки Puppeteer и среды выполнения Node.js.

Ниже приведено пошаговое руководство по сканированию сайтов на JavaScript с помощью Puppeteer и Node.js:

1. Установите Node.js

Загрузите и установите последнюю версию Node.js с официального сайта (https://nodejs.org/).

2. Создайте каталог проекта

Создайте новый каталог для проекта и перейдите в него с помощью командной строки.

mkdir js-crawler cd js-crawler

3. Инициализируйте новый проект Node.js

Выполните следующую команду в каталоге проекта, чтобы создать новый файл package.json с настройками по умолчанию.

npm init -y

4. Установите Puppeteer

Установите Puppeteer, выполнив следующую команду в каталоге проекта

npm install puppeteer

5. Создайте файл JavaScript

Создайте новый файл с именем

crawler.js

в каталоге проекта. В нем будет содержаться код для сканирования сайта на JavaScript.

6. Напишите код сканера

Откройте

crawler.js

и добавьте следующий код:

const puppeteer = require('puppeteer');async function crawlJavaScriptWebsite(url) {

Запустите новый экземпляр браузера

constbrowser =awaitpuppeteer.launch({headless:true});

Создайте новую страницу в браузере

constpage =awaitbrowser.newPage();

Перейдите по целевому URL

awaitpage.goto(url, {waitUntil:'networkidle2'})

Извлеките данные со страницы с помощью

evaluate()constdata =awaitpage.evaluate(() =>{

Напишите здесь собственный код JavaScript для извлечения нужных данных. Например, извлечем все заголовки (элементы h1) со страницы.

constheadings =Array.from(document.querySelectorAll('h1')).map(heading=>heading.textContent);return{ headings, }; });

Закройте браузер

awaitbrowser.close();

Верните извлеченные данные

returndata; }

Пример использования:

crawlJavaScriptWebsite('https://example.com/') .then(data=>console.log(data)) .catch(err=>console.error(err));

Замените URL

https://example.com/

на URL целевого сайта и настройте функцию

page.evaluate()

для извлечения нужных данных.

7. Запустите сканер

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

node crawler.js

Скрипт запустит безголовый браузер, перейдет по целевому URL и выполнит код JavaScript, указанный в функции

page.evaluate()

. Извлеченные данные будут выведены в консоль.

Учтите, что это простой пример сканирования сайта на JavaScript. Для более сложных сценариев может потребоваться взаимодействовать со страницей, обрабатывать AJAX-запросы, прокручивать страницу или работать с CAPTCHA и файлами cookie.

Как сканировать веб-страницы с помощью Python

Сканирование веб-сайта с помощью Python включает получение веб-страниц, разбор их содержимого и переход по ссылкам на другие страницы. В этом руководстве мы воспользуемся двумя популярными библиотеками Python: Requests и Beautiful Soup. Предполагается, что Python уже установлен и вы имеете базовое представление о программировании на Python.

Шаг 1: Установите необходимые библиотеки

Установите библиотеки Requests и Beautiful Soup с помощью pip:

pip install requests beautifulsoup4

Шаг 2: Импортируйте библиотеки

Импортируйте необходимые библиотеки в скрипт Python:

importrequests frombs4importBeautifulSoup

Шаг 3: Создайте функцию для получения содержимого веб-страницы

Создайте функцию для получения содержимого веб-страницы с помощью библиотеки Requests:

deffetch_page(url):response = requests.get(url)ifresponse.status_code ==200:returnresponse.text else:print(f"Failed to fetch{url}(status code{response.status_code})")returnNone

Шаг 4: Создайте функцию для разбора содержимого веб-страницы

Создайте функцию для разбора содержимого веб-страницы с помощью библиотеки Beautiful Soup:

defparse_page(html): soup = BeautifulSoup(html,"html.parser")returnsoup

Шаг 5: Создайте функцию для извлечения ссылок из обработанного содержимого

Создайте функцию для извлечения всех ссылок из обработанного содержимого веб-страницы:

defextract_links(soup, base_url):links = []fora_taginsoup.find_all("a"):href = a_tag.get("href")ifhrefandnothref.startswith("#"):ifnothref.startswith("http"):href = base_url + href links.append(href)returnlinks

Шаг 6: Создайте функцию для сканирования веб-сайта

Создайте функцию для рекурсивного сканирования веб-сайта:

defcrawl_website(url, max_depth=2, depth=0):ifdepth > max_depth:return html = fetch_page(url)ifnothtml:return soup = parse_page(html)links = extract_links(soup, url)print(f"{' ' * depth}[{depth}]{url}")forlinkinlinks:crawl_website(link, max_depth, depth +1)

Шаг 7: Запустите сканер

Запустите сканер, вызвав функцию

crawl_website

с нужным URL и максимальной глубиной:

if__name__ =="__main__":start_url ="https://example.com/"max_depth =2 crawl_website(start_url, max_depth)

Это пошаговое руководство показывает, как сканировать веб-сайт с помощью Python. Вы можете настроить функцию

crawl_website

для работы с конкретной структурой веб-сайта, добавить логику для сохранения извлечённой информации или реализовать более продвинутые функции сканирования, например обработку robots.txt, ограничение частоты запросов или выполнение запросов параллельно.

12 советов, как сканировать сайты и не попасть под блокировку

Вот основные стратегии сканирования сайтов без блокировок:

#1: Проверьте протокол исключения роботов

Прежде чем сканировать сайт или собирать с него данные, убедитесь, что владелец разрешает сбор данных с целевой страницы. Изучите файл протокола исключения роботов (robots.txt) на сайте и соблюдайте установленные правила.

Даже если сайт разрешает сканирование, действуйте осторожно и не наносите ему вреда. Соблюдайте правила, указанные в протоколе исключения роботов, сканируйте сайт в часы наименьшей нагрузки, ограничивайте количество запросов с одного IP-адреса и делайте паузы между запросами.

Однако даже если сайт разрешает веб-скрейпинг, вы всё равно можете столкнуться с блокировками, поэтому важно также выполнить дополнительные шаги. Более подробные рекомендации вы найдете в нашем руководстве по веб-скрейпингу на Python.

#2: Используйте прокси-сервер

Сканирование сайтов было бы почти невозможно без прокси. Выберите надежного поставщика прокси-сервисов и подберите прокси с IP-адресами дата-центров или резидентными IP-адресами в зависимости от задачи.

Использование посредника между вашим устройством и целевым сайтом снижает вероятность блокировки IP-адреса, обеспечивает анонимность и позволяет получать доступ к сайтам, которые могут быть недоступны в вашем регионе. Например, если вы находитесь в Германии, вам может понадобиться прокси из США, чтобы получить доступ к веб-контенту в Соединенных Штатах.

Для оптимальных результатов выбирайте поставщика прокси с большим пулом IP-адресов и широким выбором локаций.

#3: Меняйте IP-адреса

При использовании пула прокси важно менять IP-адреса.

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

Все резидентные прокси Oxylabs поддерживают ротацию IP-адресов, но если вы используете прокси дата-центров, вам понадобится сервис ротации прокси. Мы также обеспечиваем ротацию прокси IPv6 и IPv4. Если вас интересуют различия между IPv4 и IPv6, прочитайте статью, написанную моей коллегой Иветой.

#4: Используйте реальные User-Agent

Большинство серверов, на которых размещаются сайты, могут проверять заголовки HTTP-запросов, создаваемых ботами-сканерами. Этот заголовок HTTP-запроса, называемый User-Agent, содержит различную информацию: от операционной системы и программного обеспечения до типа приложения и его версии.

Серверы легко обнаруживают подозрительные User-Agent. Реальные User-Agent содержат популярные конфигурации HTTP-запросов, которые используют обычные посетители. Чтобы избежать блокировки, настройте User-Agent так, чтобы он выглядел как обычный.

Поскольку каждый запрос из веб-браузера содержит User-Agent, его следует регулярно менять.

Также важно использовать актуальные и наиболее популярные User-Agent. Если вы отправляете запросы с User-Agent пятилетней давности, соответствующим неподдерживаемой версии Firefox, это вызывает множество подозрений. В интернете можно найти общедоступные базы данных, показывающие, какие User-Agent сейчас наиболее популярны. У нас также есть собственная регулярно обновляемая база данных, поэтому свяжитесь с нами, если вам нужен доступ к ней.

#5: Правильно настройте отпечаток устройства

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

При скрейпинге в интернете TCP оставляет различные параметры. Их определяет операционная система или устройство конечного пользователя. Если вы хотите узнать, как избежать попадания в черный список при скрейпинге, следите за тем, чтобы ваши параметры были согласованными. В качестве альтернативы можно использовать Web Unblocker — решение на основе прокси с ИИ и динамической подменой отпечатков. Web Unblocker сочетает множество переменных отпечатков таким образом, что даже когда он определяет наиболее подходящий отпечаток, отпечатки всё равно выглядят случайными и позволяют проходить проверки антибот-систем.

#6: Остерегайтесь ловушек-ловушек

Остерегайтесь ловушек-ловушек — ссылок в HTML-коде, которые могут обнаружить веб-скрейперы, но не видят обычные пользователи. Их используют для выявления и блокировки веб-сканеров, поскольку по таким ссылкам переходят только роботы. Установка таких ловушек требует немало усилий, однако некоторые владельцы сайтов могут использовать их для обнаружения веб-сканеров. Поэтому будьте осторожны, если ваш запрос заблокирован и сканер обнаружен.

#7: Используйте сервисы для решения CAPTCHA

CAPTCHA создают серьезные трудности для сканирования сайтов, поскольку посетителям нужно решать головоломки, чтобы подтвердить, что они люди. Часто в таких заданиях используются изображения, которые компьютерам трудно распознать. Чтобы обходить CAPTCHA, используйте специализированные сервисы для их решения или готовые инструменты для сканирования, например инструмент для сбора данных Oxylabs, который решает CAPTCHA и предоставляет готовые результаты. Подозрительное поведение может побудить целевой сайт предложить решить CAPTCHA.

#8: Измените шаблон сканирования

Чтобы избежать блокировки, измените порядок навигации сканера, сделав его менее предсказуемым. Добавьте случайные щелчки, прокрутку и движения мыши, чтобы имитировать поведение обычного пользователя. Чтобы придерживаться лучших практик, подумайте о том, как обычный пользователь просматривал бы сайт, и настройте инструмент соответствующим образом. Например, переход на главную страницу перед запросом внутренних страниц — логичная последовательность действий.

#9: Снизьте скорость скрейпера

Чтобы снизить риск блокировки, замедлите работу скрейпера: добавьте случайные паузы между запросами или команды ожидания перед выполнением действия. Если для URL установлено ограничение частоты запросов, соблюдайте ограничения сайта и снизьте скорость скрейпинга, чтобы избежать ограничения запросов.

#10: Сканируйте сайты в часы наименьшей нагрузки

Сканеры работают быстрее обычных пользователей и могут значительно увеличивать нагрузку на сервер. Сканирование в периоды высокой нагрузки может негативно сказаться на работе пользователей из-за замедления сервиса. Чтобы избежать этого, сканируйте сайты в часы наименьшей нагрузки, например сразу после полуночи (с учетом местного времени сервиса), чтобы снизить нагрузку на сервер.

#11: Не собирайте изображения

Сбор изображений может быть рискованным: зачастую это объемные данные, защищенные авторским правом. Кроме того, изображения часто скрыты в элементах JavaScript, что усложняет сбор данных и замедляет работу веб-скрейпера. Для извлечения изображений из элементов JS потребуется более сложная процедура скрейпинга.

#12: Используйте headless-браузер

Headless-браузер — это инструмент, который работает как обычный браузер, но не имеет графического интерфейса. Он позволяет собирать контент, загружаемый при отображении элементов JavaScript. В самых популярных браузерах — Chrome и Firefox — есть режимы headless, которые можно использовать для скрейпинга сайтов без блокировок.

Видеоинструкция по сбору данных с веб-сайта

В этом руководстве Oxylabs вы узнаете об основах веб-краулинга и его важности для сбора данных, а также обсудите этические и правовые аспекты. В нем представлены популярные инструменты, такие как Scrapy, Beautiful Soup и Selenium, и объясняется, как выбрать подходящий именно вам.

Руководство поможет понять структуру веб-сайта, создать простой краулер и извлечь нужную информацию. Оно также напоминает о правилах этичного веб-скрейпинга: например, необходимо соблюдать правила robots.txt и не перегружать серверы.

Видео также поможет справиться с такими трудностями, как получение данных с динамических страниц, обработка нескольких страниц и предотвращение блокировок. В нем показано, как сохранять и упорядочивать данные, а также даны советы о том, как масштабировать и оптимизировать проект веб-краулинга. И наконец, в нем напоминается о необходимости всегда соблюдать этические и правовые нормы.

Заключение

Завершая наше увлекательное путешествие в мир веб-краулинга, мы понимаем: овладеть этим искусством — все равно что получить карту сокровищ для исследования необъятного и постоянно меняющегося пространства интернета. Мы подробно рассмотрели, чем веб-краулинг отличается от веб-скрейпинга, познакомились с различными стратегиями и исследовали динамические сайты на JavaScript и веб-краулинг на Python.

Наши советы помогут вам вести сбор данных с веб-сайтов ответственно и этично, избегая возможных ошибок и препятствий на этом пути. Отправляясь в бескрайний цифровой океан и опираясь на знания, полученные из этой подробной статьи, помните: умение использовать возможности веб-краулинга позволит вам обойти конкурентов и обнаружить скрытые сокровища в глубинах цифрового мира.