Все взаимодействия с Интернетом требуют использования IP-адреса. Веб-сайты используют этот IP-адрес для идентификации пользователя или пользователей, определения вашего местоположения и других метаданных, таких как интернет-провайдер, часовой пояс или тип устройства. Веб-серверы используют эту информацию для адаптации или ограничения доступа к контенту или ресурсам. Это означает, что при веб-парсинге сайты могут блокировать запросы, исходящие с вашего IP-адреса, если сочтут, что структура трафика или поведение являются необычными, похожими на ботов или вредоносными. К счастью, тут могут помочь прокси-серверы.
Прокси-сервер — это сервер-посредник, выполняющий функцию шлюза между пользователем и Интернетом. Он получает запросы от пользователей, перенаправляет их на веб-ресурсы, а затем возвращает полученные данные пользователям. Прокси-сервер позволяет скрытно просматривать веб-страницы и выполнять парсинг, скрывая ваш реальный IP-адрес, что повышает безопасность, конфиденциальность и анонимность.
Прокси-серверы также помогают обходить запреты на использование IP-адресов, изменяя ваш IP-адрес и создавая впечатление, что запросы поступают от разных пользователей. Прокси-серверы, расположенные в разных регионах, позволяют получать доступ к геоспецифичному контенту, например фильмам или новостям, в обход геоблокировки.
Из этой статьи вы узнаете, как настроить прокси-сервер длявеб-парсинга в Go. Вы также узнаете о прокси-серверах Bright Data и о том, как они могут помочь вам упростить этот процесс.
Настройка прокси-сервера
Из этого руководства вы узнаете, как модифицировать приложение для веб-парсинга, написанное на Go, для взаимодействия с веб-сайтом It’s FOSS через локальный прокси-сервер или прокси-сервер на собственном хостинге. Для целей этого руководства предполагается, что среда разработки Go уже настроена.
Для начала вам необходимо настроить прокси-сервер с помощью Squid, программного обеспечения (ПО) для прокси-серверов с открытым исходным кодом. Если вы знакомы с другим ПО прокси-серверов, вы также сможете использовать и это ПО. В данной статье используется Squid на боксе Fedora 39 Linux. В большинстве Linux-дистрибутивов Squid включен в репозитории по умолчанию. Вы также можете ознакомиться с документацией, чтобы загрузить необходимые пакеты для вашей операционной системы.
В терминале выполните следующую команду для установки Squid:
dnf install squid -yn
После завершения запустите службу, выполнив следующую команду:
sudo systemctl enable u002du002dnow squidn
Проверьте состояние службы с помощью этой команды:
sudo systemctl status squidn
Ваш результат должен выглядеть следующим образом:

Это означает, что служба активна и запущена. По умолчанию Squid запускает и прослушивает запросы через порт 3128. Используйте следующую команду curl для проверки передачи данных через прокси-сервер:
curl u002du002dproxy 127.0.0.1:3128 u0022http://lumtest.com/myip.jsonu0022n
Полученный вами ответ должен выглядеть следующим образом:
curl u002du002dproxy 127.0.0.1:3128 u0022http://lumtest.com/myip.jsonu0022n{u0022ipu0022:u0022196.43.196.126u0022,u0022countryu0022:u0022GHu0022,u0022asnu0022:{u0022asnumu0022:327695,u0022org_nameu0022:u0022AITIu0022},u0022geou0022:{u0022cityu0022:u0022u0022,u0022regionu0022:u0022u0022,u0022region_nameu0022:u0022u0022,u0022postal_codeu0022:u0022u0022,u0022latitudeu0022:8.1,u0022longitudeu0022:-1.2,u0022tzu0022:u0022Africa/Accrau0022}}nn
Метаданные должны включать ваш публичный IP-адрес, страну и организацию, которой этот адрес принадлежит. Это также подтверждает, что вы успешно установили рабочий прокси-сервер.
Настройте демо-парсер
Чтобы вам было проще следить за ситуацией, воспользуйтесь простым приложением Go для веб-парсинга, доступным вот в этом репозитории GitHub. В парсере представлены заголовки, выдержки и категории последних публикаций в It’s FOSS, популярном блоге, в котором обсуждаются программные продукты с открытым исходным кодом. Затем парсер посещает Lumtest , чтобы получить информацию об IP-адресе, используемом HTTP-клиентом парсера для взаимодействия с Интернетом. Та же логика реализована с использованием трех разных пакетов Go: Colly, goquery и Selenium. Из следующего раздела вы узнаете, как модифицировать каждую реализацию для использования прокси-сервера.
Начните с клонирования репозитория, выполнив следующую команду в своем предпочтительном терминале или оболочке:
$ git clone https://github.com/rexfordnyrk/go_scrap_proxy.gitn
Этот репозиторий состоит из двух веток: ветки main
, в которой находится готовый код, и ветки basic
, в которой содержится исходный код, который вы собираетесь изменить. Используйте следующую команду, чтобы извлечь рабочую копию
в ветку basic
:
$ git checkout basicn
Эта ветка содержит три файла .go
для реализации парсера с каждой библиотекой без настроенного прокси-сервера. Она также содержит исполняемый файл chromedriver
, необходимый для реализации парсера в Selenium:
.nâââ chromedrivernâââ colly.gonâââ go.modnâââ goquery.gonâââ go.sumnâââ LICENSEnâââ README.mdnâââ selenium.gonn1 directory, 8 filesn
Любой из них можно запустить по отдельности, используя команду go run
с определенным именем файла. Например, следующая команда запускает парсер с помощью Colly:
go run ./colly.go n
Ваш результат должен выглядеть следующим образом:
$ go run ./colly.gonnArticle 0: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming ð®u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot ð¬u0022,u0022excerptu0022:u0022Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]n
Эти выходные данные содержат всю информацию из It’s FOSS, полученную с помощью парсинга. В нижней части выходных данных вы найдете информацию об IP-адресе, полученную от Lumtest, в которой указано текущее соединение, используемое парсером. Выполнение всех трех реализаций должно привести к получению аналогичных ответов. После того как вы протестировали все три реализации, вы можете приступить к парсингу с помощью локального прокси-сервера.
Реализация парсеров с локальным прокси-сервером
Из этого раздела вы узнаете обо всех трех реализациях парсера и измените их для использования прокси-сервера. Каждый файл .go
состоит из функции main()
, с которой запускается приложение, и функции ScrapeWithLibrary()
, содержащей инструкции по парсингу.
Использование goquery с локальным прокси-сервером
goquery — это библиотека для Go, которая предоставляет набор методов и функций для анализа HTML-документов и управления ими, аналогично тому, как jQuery работает с JavaScript. Это особенно полезно при веб-парсинге, поскольку позволяет просматривать, запрашивать и изменять структуру HTML-страниц. Однако эта библиотека не обрабатывает сетевые запросы или операции любого рода, поэтому вам необходимо получить и предоставить ей HTML-страницу.
Перейдя к файлу goquery.go
, вы найдете реализацию веб-парсера goquery. Откройте его в своей предпочтительной интегрированной среде разработки (IDE) или текстовом редакторе.
В функции ScrapeWithGoquery()
необходимо изменить транспорт HTTP-клиента, указав URL-адрес вашего прокси-сервера HTTP, который представляет собой комбинацию имени хоста или IP-адреса и порта в формате http://HOST:PORT
.
Обязательно импортируйте пакет net/url
в этот файл. Вставьте и замените определение HTTP-клиента следующим фрагментом:
...nnfunc ScrapeWithGoquery() {n // Define the URL of the proxy servern proxyStr := u0022http://127.0.0.1:3128u0022nn // Parse the proxy URLn proxyURL, err := url.Parse(proxyStr)n if err != nil {n fmt.Println(u0022Error parsing proxy URL:u0022, err)n returnn }nn //Create an http.Transport that uses the proxyn transport := u0026http.Transport{n Proxy: http.ProxyURL(proxyURL),n }nn // Create an HTTP client with the transportn client := u0026http.Client{n Transport: transport,n }n n... n
Этот фрагмент кода модифицирует HTTP-клиент, используя транспорт, настроенный для использования локального прокси-сервера. Обязательно замените IP-адрес IP-адресом прокси-сервера.
Теперь запустите эту реализацию с помощью следующей команды из каталога проекта:
go run ./goquery.gon
Ваш результат должен выглядеть следующим образом:
$ go run ./goquery.gonnArticle 0: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming ð®u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot ð¬u0022,u0022excerptu0022:u0022Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]n
Использование Colly с локальным прокси-сервером
Colly — это универсальный и эффективный фреймворк веб-парсинга для Go, известный своим удобным API и безупречной интеграцией с библиотеками синтаксического анализа HTML, такими как goquery
. Однако, в отличие от goquery
, он поддерживает и предоставляет API для обработки различных сетевых моделей поведения, включая асинхронные запросы на высокоскоростной парсинг, локальное кэширование и ограничение скорости для обеспечения эффективного и ответственного использования веб-ресурсов, автоматическую обработку файлов cookie и сеансов, настраиваемые пользовательские агенты и комплексную обработку ошибок. Кроме того, он поддерживает использование прокси-сервера с переключением или ротацией прокси-серверов и может быть расширен для выполнения таких задач, как парсинг контента, созданного на JavaScript, путем интеграции с headless-браузерами.
Откройте файл colly.go
в редакторе или IDE и вставьте следующие строки кода сразу после инициализации нового сборщика в функции scrapeWithColly()
:
...n // Define the URL of the proxy servern proxyStr := u0022http://127.0.0.1:3128u0022n // SetProxy sets a proxy for the collectorn if err := c.SetProxy(proxyStr); err != nil {n log.Fatalf(u0022Error setting proxy configuration: %vu0022, err)n }n n...n
В этом фрагменте метод Colly SetProxy()
применяется для определения прокси-сервера, который будет использоваться этим инстансом сборщика сетевых запросов.
Теперь запустите эту реализацию с помощью следующей команды из каталога проекта:
go run ./colly.gon
Ваш результат должен выглядеть следующим образом:
$ go run ./colly.gonnArticle 0: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming ð®u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot ð¬u0022,u0022excerptu0022:u0022Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP map[asn:map[asnum:29614 org_name:VODAFONE GHANA AS INTERNATIONAL TRANSIT] country:GH geo:map[city:Accra latitude:5.5486 longitude:-0.2012 lum_city:accra lum_region:aa postal_code: region:AA region_name:Greater Accra Region tz:Africa/Accra] ip:197.251.144.148]nn
Использование Selenium с локальным прокси-сервером
Selenium — это инструмент, который в основном используется для автоматизации взаимодействия с веб-браузерами при тестировании веб-приложений. Он способен выполнять такие задачи, как нажатие кнопок, ввод текста и извлечение данных с веб-страниц, что делает его идеальным средством для веб-парсинга с помощью автоматических взаимодействий. Имитация реальных пользовательских взаимодействий стала возможной благодаря WebDriver, который Selenium использует для управления браузерами. Хотя в этом примере применяется Chrome, Selenium также поддерживает другие браузеры, включая Firefox, Safari и Internet Explorer.
Служба Selenium WebDriver позволяет вам предоставлять прокси-сервер и другие конфигурации, чтобы повлиять на поведение базового браузера при взаимодействии с Интернетом, как и в случае с реальным браузером. Программно это можно настроить с помощью определения selelium.Capabilities{}
.
Чтобы использовать Selenium с локальным прокси-сервером, отредактируйте файл selenium.go
в ScrapeWithSelenium()
и замените определение selelium.Capabilities{}
следующим фрагментом:
...nn // Define proxy settingsn proxy := selenium.Proxy{n Type: selenium.Manual,n HTTP: u0022127.0.0.1:3128u0022, // Replace with your proxy settingsn SSL: u0022127.0.0.1:3128u0022, // Replace with your proxy settingsn }nn // Configuring the WebDriver instance with the proxyn caps := selenium.Capabilities{n u0022browserNameu0022: u0022chromeu0022,n u0022proxyu0022: proxy,n }n n...n
Этот фрагмент определяет различные параметры прокси-сервера для Selenium, которые используются для настройки возможностей Selenium для WebDriver. При следующем выполнении будет использовано прокси-соединение.
Теперь запустите реализацию с помощью следующей команды из каталога проекта:
go run ./selenium.gon
Ваш результат должен выглядеть следующим образом:
$ go run ./selenium.gonnArticle 0: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.u0022,u0022titleu0022:u0022FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.u0022,u0022titleu0022:u0022How to Use Tiling Assistant on GNOME Desktop?u0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.u0022,u0022titleu0022:u0022Free Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Gaming ð®u0022,u0022excerptu0022:u0022Here are the best tips to make your Linux gaming experience enjoyable.u0022,u0022titleu0022:u00227 Tips and Tools to Improve Your Gaming Experience on Linuxu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.u0022,u0022titleu0022:u0022FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Yearu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Wondering which init service your Linux system uses? Here's how to find it out.u0022,u0022titleu0022:u0022How to Check if Your Linux System Uses systemdu0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot ð¬u0022,u0022excerptu0022:u0022Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP {u0022ipu0022:u0022197.251.144.148u0022,u0022countryu0022:u0022GHu0022,u0022asnu0022:{u0022asnumu0022:29614,u0022org_nameu0022:u0022VODAFONE GHANA AS INTERNATIONAL TRANSITu0022},u0022geou0022:{u0022cityu0022:u0022Accrau0022,u0022regionu0022:u0022AAu0022,u0022region_nameu0022:u0022Greater Accra Regionu0022,u0022postal_codeu0022:u0022u0022,u0022latitudeu0022:5.5486,u0022longitudeu0022:-0.2012,u0022tzu0022:u0022Africa/Accrau0022,u0022lum_cityu0022:u0022accrau0022,u0022lum_regionu0022:u0022aau0022}}nn
Хотя вы можете обслуживать прокси-сервер самостоятельно, ваши возможности ограничены различными факторами, включая необходимость настройки новых серверов для новых различных регионов, а также другие проблемы с обслуживанием и безопасностью.
Прокси-серверы Bright Data
Bright Data предлагает отмеченную наградами глобальную инфраструктуру прокси-сети с полным набором прокси-серверов и служб, которые можно использовать для различных целей сбора веб-данных.
Благодаря обширной глобальной сети прокси-серверов Bright Data вы можете легко получать доступ к данным и собирать их в разных странах. Bright Data также предоставляет ряд типов прокси-серверов, включая более 350 миллионов уникальных резидентных прокси-серверов, прокси-серверов интернет-провайжеров, прокси-серверов центров обработки данныхи мобильных прокси-серверов, каждый из которых предлагает уникальные преимущества, такие как легитимность, скорость и надежность, для решения конкретных задач сбора веб-данных.
Кроме того, система ротации прокси-серверов Bright Data обеспечивает высокую анонимность и минимизирует обнаружение, что делает ее идеальной для непрерывного и крупномасштабного сбора веб-данных.
Настройка резидентного прокси-сервера с помощью Bright Data
Получить резидентный прокси-сервер с помощью Bright Data очень просто. Все, что вам нужно сделать, — это зарегистрироваться для получения бесплатной пробной версии. После регистрации вы увидите что-то вроде этого:

Нажмите кнопку «Начать работу» в разделе «Резидентные прокси-серверы».
Вам будет предложено заполнить следующую форму:

Теперь укажите имя этого инстанса. Здесь это my_go_demo_proxy
. Также необходимо указать тип предоставляемого IP-адреса: выберите «Общий» (Shared) (если вы хотите использовать общие прокси-серверы). Затем укажите уровень геолокации, который вы хотите имитировать при доступе к веб-контенту. По умолчанию это уровень «Страна» или «Зона». Вам также необходимо указать, хотите ли вы кэшировать запрашиваемые веб-страницы. Пока отключите кеширование.
После заполнения этой информации нажмите «Добавить», чтобы создать и подготовить резидентный прокси-сервер.
Затем вам необходимо активировать его. Однако, как нового пользователя, сначала вас попросят ввести платежные реквизиты. Выполнив этот шаг, перейдите на панель управления и нажмите на только что созданный резидентный прокси-сервер:

Убедитесь, что выбрана вкладка «Параметры доступа».
Здесь вы найдете различные параметры, необходимые для использования резидентного прокси-сервера, такие как хост, порт и учетные данные для аутентификации. Эта информация вас скоро понадобится.
Теперь пора интегрировать ваш резидентный прокси-сервер Bright Data со всеми тремя реализациями парсера. Хотя этот процесс аналогичен процессу для локального сервера, здесь вам также придется включить аутентификацию. Кроме того, поскольку вы взаимодействуете с Интернетом программным путем, просматривать и принимать SSL-сертификаты от прокси-сервера таким же способом, как в браузере с графическим пользовательским интерфейсом, может оказаться невозможным. Поэтому вам необходимо программно отключить проверку сертификата SSL в веб-клиенте, чтобы ваши запросы выполнялись без проблем.
Начните с создания каталога brightdata
в каталоге проекта и скопируйте три файла .go
в каталог brightdata
. Ваша структура каталогов должна выглядеть следующим образом:
.nâââ brightdatanâ âââ colly.gonâ âââ goquery.gonâ âââ selenium.gonâââ chromedrivernâââ colly.gonâââ go.modnâââ goquery.gonâââ go.sumnâââ LICENSEnâââ README.mdnâââ selenium.gonn2 directories, 11 filesnn
В дальнейшем вы будете изменять файлы в каталоге brightdata
.
Использование goquery с резидентным прокси-сервером Bright Data
В функции ScrapeWithGoquery()
необходимо изменить переменную proxyStr
, чтобы включить учетные данные для аутентификации в URL-адрес прокси-сервера в формате http://USERNAME:PASSWORD@HOST:PORT
. Замените текущее определение следующим фрагментом:
...nnfunc ScrapeWithGoquery() {n // Define the proxy server with username and passwordn proxyUsername := u0022usernameu0022 //Your residential proxy username n proxyPassword := u0022your_passwordu0022 //Your Residential Proxy password heren proxyHost := u0022server_hostu0022 //Your Residential Proxy Hostn proxyPort := u0022server_portu0022 //Your Port heren n proxyStr := fmt.Sprintf(u0022http://%s:%s@%s:%su0022, url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)n n // Parse the proxy URLn...n
Затем необходимо изменить транспорт HTTP-клиента, указав конфигурацию, позволяющую игнорировать проверку сертификата SSL/TLS прокси-сервера. Начните с добавления пакета crypto/tls
к импорту. Затем замените определение http.Transport
следующим фрагментом после анализа URL-адреса прокси-сервера:
...nnfunc ScrapeWithGoquery() {n n // Parse the proxy URLn...nn //Create an http.Transport that uses the proxyn transport := u0026http.Transport{n Proxy: http.ProxyURL(proxyURL),n TLSClientConfig: u0026tls.Config{n InsecureSkipVerify: true, // Disable SSL certificate verificationn },n }nn // Create an HTTP client with the transportn... n
Этот фрагмент кода модифицирует HTTP-клиент, используя транспорт, настроенный для использования локального прокси-сервера. Обязательно замените IP-адрес на IP-адрес вашего прокси-сервера.
Затем запустите эту реализацию, используя следующую команду из каталога проекта:
go run brightdata/goquery.go n
Ваши выходные данные должны выглядеть следующим образом:
$ go run brightdata/goquery.go nnArticle 0: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Open source rival to Twitter, a hyped new terminal and a cool new Brave/Chrome feature among many other things.u0022,u0022titleu0022:u0022FOSS Weekly #24.07: Fedora Atomic Distro, Android FOSS Apps, Mozilla Monitor Plus and Moreu0022}nArticle 1: {u0022categoryu0022:u0022Explainu0022,u0022excerptu0022:u0022Intel makes things confusing, I guess. Let's try making the processor naming changes simpler.u0022,u0022titleu0022:u0022Intel Processor Naming Changes: All You Need to Knowu0022}nArticle 2: {u0022categoryu0022:u0022Linux Commandsu0022,u0022excerptu0022:u0022The Cut command lets you extract a part of the file to print without affecting the original file. Learn more here.u0022,u0022titleu0022:u0022Cut Command Examplesu0022}nArticle 3: {u0022categoryu0022:u0022Raspberry Piu0022,u0022excerptu0022:u0022A UART attached to your Raspberry Pi can help you troubleshoot issues with your Raspberry Pi. Here's what you need to know.u0022,u0022titleu0022:u0022Using a USB Serial Adapter (UART) to Help Debug Your Raspberry Piu0022}nArticle 4: {u0022categoryu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Damn Small Linux resumes development after 16 years.u0022,u0022titleu0022:u0022FOSS Weekly #24.06: Ollama AI, Zorin OS Upgrade, Damn Small Linux, Sudo on Windows and Moreu0022}nArticle 5: {u0022categoryu0022:u0022Tutorialu0022,u0022excerptu0022:u0022Zorin OS now provides a way to upgrade to a newer major version. Here's how to do that.u0022,u0022titleu0022:u0022How to upgrade to Zorin OS 17u0022}nArticle 6: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.u0022,u0022titleu0022:u0022Installing Packages From External Repositories in Ubuntu [Explained]u0022}nArticle 7: {u0022categoryu0022:u0022Troubleshoot ð¬u0022,u0022excerptu0022:u0022Getting a warning that the boot partition has no space left? Here are some ways you can free up space on the boot partition in Ubuntu Linux.u0022,u0022titleu0022:u0022How to Free Up Space in /boot Partition on Ubuntu Linux?u0022}nArticle 8: {u0022categoryu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version youâre using? Hereâs how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP map[asn:map[asnum:7922 org_name:COMCAST-7922] country:US geo:map[city:Crown Point latitude:41.4253 longitude:-87.3565 lum_city:crownpoint lum_region:in postal_code:46307 region:IN region_name:Indiana tz:America/Chicago] ip:73.36.77.244]n
Вы заметите, что, несмотря на то, что вы просматриваете одни и те же статьи, проверка IP-адреса прокси-сервера выдала другую информацию, указывающую на переход из другого места или страны.
Использование Colly с резидентным прокси-сервером Bright Data
Несмотря на то, что пакет Colly не предлагает способа программного отключения проверки SSL/TLS, он дает вам возможность предоставить собственный транспорт
HTTP-клиенту.
Открыв файл colly.go
в своем редакторе или IDE, вставьте следующие строки кода после инициализации нового сборщика внутри функции ScrapeWithColly()
(не забудьте добавить импорт net/url
и net/http
):
...nfunc ScrapeWithColly() {n ...n n //Create an http.Transport that uses the proxyn transport := u0026http.Transport{n TLSClientConfig: u0026tls.Config{n InsecureSkipVerify: true, // Disable SSL certificate verificationn },n }n n // Set the collector instance to use the configured transportn c.WithTransport(transport)n n n...n
Этот фрагмент определяет HTTP-транспорт с отключенной проверкой SSL и использует метод WithTransport()
в Colly для настройки транспорта сборщика сетевых запросов.
Измените переменную proxyStr
так, чтобы она содержала учетные данные резидентного прокси-сервера (как и в случае с goquery). Замените строку proxyStr
следующим фрагментом:
...nn // Define the proxy server with username and passwordn proxyUsername := u0022usernameu0022 //Your residential proxy username n proxyPassword := u0022your_passwordu0022 //Your Residential Proxy password heren proxyHost := u0022server_hostu0022 //Your Residential Proxy Hostn proxyPort := u0022server_portu0022 //Your Port herenn proxyStr := fmt.Sprintf(u0022http://%s:%s@%s:%su0022, url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)nn...n
Не забудьте заменить строковые значения значениями со страницы «Параметры доступа» вашего резидентного прокси-сервера.
Потом запустите эту реализацию, используя следующую команду из каталога проекта:
go run brightdata/colly.gon
go run brightdata/colly.go nâ¦nnCheck Proxy IP map[asn:map[asnum:2856 org_name:British Telecommunications PLC] country:GB geo:map[city:Turriff latitude:57.5324 longitude:-2.3883 lum_city:turriff lum_region:sct postal_code:AB53 region:SCT region_name:Scotland tz:Europe/London] ip:86.180.236.254]nn
В части выходных данных «Проверьте IP-адрес прокси-сервера» вы заметите смену страны, несмотря на то, что используются те же учетные данные.
Использование Selenium с резидентным прокси-сервером Bright Data
При работе с Selenium необходимо изменить определение selenium.Proxy{}
, чтобы использовать строку URL-адреса прокси-сервера с учетными данными. Замените текущее определение прокси-сервера следующим:
...nn // Define the proxy server with username and passwordn proxyUsername := u0022usernameu0022 //Your residential proxy usernamen proxyPassword := u0022your_passwordu0022 //Your Residential Proxy password heren proxyHost := u0022server_hostu0022 //Your Residential Proxy Hostn proxyPort := u0022server_portu0022 //Your Port herenn proxyStr := fmt.Sprintf(u0022http://%s:%s@%s:%su0022, url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)nn // Define proxy settingsn proxy := selenium.Proxy{n Type: selenium.Manual,n HTTP: proxyStr,n SSL: proxyStr,n }n n...n
Не забудьте импортировать пакет
net/url
.
Этот фрагмент определяет различные параметры прокси-сервера и объединяется для создания URL-адреса прокси-сервера, используемого в конфигурации прокси-сервера.
Теперь необходимо настроить Chrome WebDriver с опциями отключения проверки SSL при использовании резидентного прокси-сервера, как это было сделано в предыдущих реализациях. Для этого измените аргументы определения chromeCaps
, включив в них опцию --ignore-certificate-errors
следующим образом:
... n caps.AddChrome(chrome.Capabilities{Args: []string{n u0022u002du002dheadless=newu0022, // Start browser without UI as a background processn u0022u002du002dignore-certificate-errorsu0022, // // Disable SSL certificate verificationn }})n...n
По умолчанию Selenium не поддерживает аутентифицированную конфигурацию прокси-сервера. Однако вы можете обойти эту проблему, используя небольшой пакет для создания расширения Chrome для аутентифицированного прокси-соединения.
Сначала добавьте пакет в свой проект, используя команду go get
:
go get https://github.com/rexfordnyrk/proxyauthnn
Затем импортируйте пакет в файл brightdata/selenium.go
, добавив строку «github.com/rexfordnyrk/proxyauth»
в блок импорта в верхней части файла.
Затем вам необходимо создать расширение Chome с помощью метода BuildExtension()
из пакета proxyauth и передать его вместе со своими учетными данными резидентного прокси-сервера Bright Data. Для этого вставьте следующий фрагмент кода после определения chromeCaps
, но перед строкой caps.AddChrome(chromeCaps)
:
â¦n //Building proxy auth extension using BrightData Proxy credentialsn extension, err := proxyauth.BuildExtention(proxyHost, proxyPort, proxyUsername, proxyPassword)n if err != nil {n log.Fatal(u0022BuildProxyExtension Error:u0022, err)n }nn //including the extension to allow proxy authentication in chromen if err := chromeCaps.AddExtension(extension); err != nil {n log.Fatal(u0022Error adding Extension:u0022, err)n }nnâ¦n
Этот фрагмент кода создает расширение Chrome и добавляет его в Chrome WebDriver, чтобы разрешить аутентифицированные веб-запросы с помощью предоставленных учетных данных прокси-сервера.
Эту реализацию можно запустить с помощью следующей команды из каталога проекта:
go run brightdata/selenium.gon
Ваш результат должен выглядеть следующим образом:
$ go run brightdata/selenium.go nnArticle 0: {u0022categoryTextu0022:u0022Newsletter âï¸u0022,u0022excerptu0022:u0022Check out the promising new features in Ubuntu 24.04 LTS and a new immutable distro.u0022,u0022titleu0022:u0022FOSS Weekly #24.08: Ubuntu 24.04 Features, Arkane Linux, grep, Fedora COSMIC and Moreu0022}nâ¦nArticle 8: {u0022categoryTextu0022:u0022Ubuntuu0022,u0022excerptu0022:u0022Wondering which Ubuntu version youâre using? Hereâs how to check your Ubuntu version, desktop environment and other relevant system information.u0022,u0022titleu0022:u0022How to Check Ubuntu Version Details and Other System Informationu0022}nnCheck Proxy IP {u0022ipu0022:u0022176.45.169.166u0022,u0022countryu0022:u0022SAu0022,u0022asnu0022:{u0022asnumu0022:25019,u0022org_nameu0022:u0022Saudi Telecom Company JSCu0022},u0022geou0022:{u0022cityu0022:u0022Riyadhu0022,u0022regionu0022:u002201u0022,u0022region_nameu0022:u0022Riyadh Regionu0022,u0022postal_codeu0022:u0022u0022,u0022latitudeu0022:24.6869,u0022longitudeu0022:46.7224,u0022tzu0022:u0022Asia/Riyadhu0022,u0022lum_cityu0022:u0022riyadhu0022,u0022lum_regionu0022:u002201u0022}}nn
Опять же, если вы посмотрите на информацию об IP-адресе в нижней части выходных данных, вы заметите, что для отправки запроса также используется другая страна. Это показывает, что ротация прокси-серверов Bright Data работает.
Как видите, использовать Bright Data в приложении Go очень просто. Сначала вы создаете резидентный прокси-сервер на платформе Bright Data и получаете свои учетные данные. Затем вы меняете код с учетом этой информации, чтобы использовать прокси-сервер для взаимодействия с Интернетом.
Заключение
Веб-прокси-серверы являются важным компонентом персонализированного взаимодействия пользователей в Интернете. Из этой статьи вы узнали все о прокси-серверах и о том, как настроить собственный прокси-сервер с помощью Squid. Вы также узнали, как интегрировать локальный прокси-сервер в приложения Go, в данном случае в веб-парсер.
Если вас интересует работа с прокси-серверами, вам следует рассмотреть возможность использования Bright Data. Эта современная прокси-сеть позволяет быстро собирать данные, не беспокоясь о дополнительной инфраструктуре или обслуживании.