Все взаимодействия с Интернетом требуют использования 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 -y
После завершения запустите службу, выполнив следующую команду:
sudo systemctl enable --now squid
Проверьте состояние службы с помощью этой команды:
sudo systemctl status squid
Ваш результат должен выглядеть следующим образом:
Это означает, что служба активна и запущена. По умолчанию Squid запускает и прослушивает запросы через порт 3128. Используйте следующую команду curl для проверки передачи данных через прокси-сервер:
curl --proxy 127.0.0.1:3128 "http://lumtest.com/myip.json"
Полученный вами ответ должен выглядеть следующим образом:
curl --proxy 127.0.0.1:3128 "http://lumtest.com/myip.json"
{"ip":"196.43.196.126","country":"GH","asn":{"asnum":327695,"org_name":"AITI"},"geo":{"city":"","region":"","region_name":"","postal_code":"","latitude":8.1,"longitude":-1.2,"tz":"Africa/Accra"}}
Метаданные должны включать ваш публичный IP-адрес, страну и организацию, которой этот адрес принадлежит. Это также подтверждает, что вы успешно установили рабочий прокси-сервер.
Настройте демо-парсер
Чтобы вам было проще следить за ситуацией, воспользуйтесь простым приложением Go для веб-парсинга, доступным вот в этом репозитории GitHub. В парсере представлены заголовки, выдержки и категории последних публикаций в It’s FOSS, популярном блоге, в котором обсуждаются программные продукты с открытым исходным кодом. Затем парсер посещает Lumtest , чтобы получить информацию об IP-адресе, используемом HTTP-клиентом парсера для взаимодействия с Интернетом. Та же логика реализована с использованием трех разных пакетов Go: Colly, goquery и Selenium. Из следующего раздела вы узнаете, как модифицировать каждую реализацию для использования прокси-сервера.
Начните с клонирования репозитория, выполнив следующую команду в своем предпочтительном терминале или оболочке:
$ git clone https://github.com/rexfordnyrk/go_scrap_proxy.git
Этот репозиторий состоит из двух веток: ветки main
, в которой находится готовый код, и ветки basic
, в которой содержится исходный код, который вы собираетесь изменить. Используйте следующую команду, чтобы извлечь рабочую копию
в ветку basic
:
$ git checkout basic
Эта ветка содержит три файла .go
для реализации парсера с каждой библиотекой без настроенного прокси-сервера. Она также содержит исполняемый файл chromedriver
, необходимый для реализации парсера в Selenium:
.
├── chromedriver
├── colly.go
├── go.mod
├── goquery.go
├── go.sum
├── LICENSE
├── README.md
└── selenium.go
1 directory, 8 files
Любой из них можно запустить по отдельности, используя команду go run
с определенным именем файла. Например, следующая команда запускает парсер с помощью Colly:
go run ./colly.go
Ваш результат должен выглядеть следующим образом:
$ go run ./colly.go
Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting 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.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}
Check 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]
Эти выходные данные содержат всю информацию из 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-клиента следующим фрагментом:
...
func ScrapeWithGoquery() {
// Define the URL of the proxy server
proxyStr := "http://127.0.0.1:3128"
// Parse the proxy URL
proxyURL, err := url.Parse(proxyStr)
if err != nil {
fmt.Println("Error parsing proxy URL:", err)
return
}
//Create an http.Transport that uses the proxy
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
// Create an HTTP client with the transport
client := &http.Client{
Transport: transport,
}
...
Этот фрагмент кода модифицирует HTTP-клиент, используя транспорт, настроенный для использования локального прокси-сервера. Обязательно замените IP-адрес IP-адресом прокси-сервера.
Теперь запустите эту реализацию с помощью следующей команды из каталога проекта:
go run ./goquery.go
Ваш результат должен выглядеть следующим образом:
$ go run ./goquery.go
Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting 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.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}
Check 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]
Использование Colly с локальным прокси-сервером
Colly — это универсальный и эффективный фреймворк веб-парсинга для Go, известный своим удобным API и безупречной интеграцией с библиотеками синтаксического анализа HTML, такими как goquery
. Однако, в отличие от goquery
, он поддерживает и предоставляет API для обработки различных сетевых моделей поведения, включая асинхронные запросы на высокоскоростной парсинг, локальное кэширование и ограничение скорости для обеспечения эффективного и ответственного использования веб-ресурсов, автоматическую обработку файлов cookie и сеансов, настраиваемые пользовательские агенты и комплексную обработку ошибок. Кроме того, он поддерживает использование прокси-сервера с переключением или ротацией прокси-серверов и может быть расширен для выполнения таких задач, как парсинг контента, созданного на JavaScript, путем интеграции с headless-браузерами.
Откройте файл colly.go
в редакторе или IDE и вставьте следующие строки кода сразу после инициализации нового сборщика в функции scrapeWithColly()
:
...
// Define the URL of the proxy server
proxyStr := "http://127.0.0.1:3128"
// SetProxy sets a proxy for the collector
if err := c.SetProxy(proxyStr); err != nil {
log.Fatalf("Error setting proxy configuration: %v", err)
}
...
В этом фрагменте метод Colly SetProxy()
применяется для определения прокси-сервера, который будет использоваться этим инстансом сборщика сетевых запросов.
Теперь запустите эту реализацию с помощью следующей команды из каталога проекта:
go run ./colly.go
Ваш результат должен выглядеть следующим образом:
$ go run ./colly.go
Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting 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.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}
Check 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]
Использование Selenium с локальным прокси-сервером
Selenium — это инструмент, который в основном используется для автоматизации взаимодействия с веб-браузерами при тестировании веб-приложений. Он способен выполнять такие задачи, как нажатие кнопок, ввод текста и извлечение данных с веб-страниц, что делает его идеальным средством для веб-парсинга с помощью автоматических взаимодействий. Имитация реальных пользовательских взаимодействий стала возможной благодаря WebDriver, который Selenium использует для управления браузерами. Хотя в этом примере применяется Chrome, Selenium также поддерживает другие браузеры, включая Firefox, Safari и Internet Explorer.
Служба Selenium WebDriver позволяет вам предоставлять прокси-сервер и другие конфигурации, чтобы повлиять на поведение базового браузера при взаимодействии с Интернетом, как и в случае с реальным браузером. Программно это можно настроить с помощью определения selelium.Capabilities{}
.
Чтобы использовать Selenium с локальным прокси-сервером, отредактируйте файл selenium.go
в ScrapeWithSelenium()
и замените определение selelium.Capabilities{}
следующим фрагментом:
...
// Define proxy settings
proxy := selenium.Proxy{
Type: selenium.Manual,
HTTP: "127.0.0.1:3128", // Replace with your proxy settings
SSL: "127.0.0.1:3128", // Replace with your proxy settings
}
// Configuring the WebDriver instance with the proxy
caps := selenium.Capabilities{
"browserName": "chrome",
"proxy": proxy,
}
...
Этот фрагмент определяет различные параметры прокси-сервера для Selenium, которые используются для настройки возможностей Selenium для WebDriver. При следующем выполнении будет использовано прокси-соединение.
Теперь запустите реализацию с помощью следующей команды из каталога проекта:
go run ./selenium.go
Ваш результат должен выглядеть следующим образом:
$ go run ./selenium.go
Article 0: {"category":"Newsletter ✉️","excerpt":"Unwind your new year celebration with new open-source projects, and keep an eye on interesting distro updates.","title":"FOSS Weekly #24.02: Mixing AI With Linux, Vanilla OS 2, and More"}
Article 1: {"category":"Tutorial","excerpt":"Wondering how to use tiling windows on GNOME? Try the tiling assistant. Here's how it works.","title":"How to Use Tiling Assistant on GNOME Desktop?"}
Article 2: {"category":"Linux Commands","excerpt":"The free command in Linux helps you gain insights on system memory usage (RAM), and more. Here's how to make good use of it.","title":"Free Command Examples"}
Article 3: {"category":"Gaming 🎮","excerpt":"Here are the best tips to make your Linux gaming experience enjoyable.","title":"7 Tips and Tools to Improve Your Gaming Experience on Linux"}
Article 4: {"category":"Newsletter ✉️","excerpt":"The first edition of FOSS Weekly in the year 2024 is here. See, what's new in the new year.","title":"FOSS Weekly #24.01: Linux in 2024, GDM Customization, Distros You Missed Last Year"}
Article 5: {"category":"Tutorial","excerpt":"Wondering which init service your Linux system uses? Here's how to find it out.","title":"How to Check if Your Linux System Uses systemd"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting 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.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you're using? Here's how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}
Check Proxy IP {"ip":"197.251.144.148","country":"GH","asn":{"asnum":29614,"org_name":"VODAFONE GHANA AS INTERNATIONAL TRANSIT"},"geo":{"city":"Accra","region":"AA","region_name":"Greater Accra Region","postal_code":"","latitude":5.5486,"longitude":-0.2012,"tz":"Africa/Accra","lum_city":"accra","lum_region":"aa"}}
Хотя вы можете обслуживать прокси-сервер самостоятельно, ваши возможности ограничены различными факторами, включая необходимость настройки новых серверов для новых различных регионов, а также другие проблемы с обслуживанием и безопасностью.
Прокси-серверы 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
. Ваша структура каталогов должна выглядеть следующим образом:
.
├── brightdata
│ ├── colly.go
│ ├── goquery.go
│ └── selenium.go
├── chromedriver
├── colly.go
├── go.mod
├── goquery.go
├── go.sum
├── LICENSE
├── README.md
└── selenium.go
2 directories, 11 files
В дальнейшем вы будете изменять файлы в каталоге brightdata
.
Использование goquery с резидентным прокси-сервером Bright Data
В функции ScrapeWithGoquery()
необходимо изменить переменную proxyStr
, чтобы включить учетные данные для аутентификации в URL-адрес прокси-сервера в формате http://USERNAME:PASSWORD@HOST:PORT
. Замените текущее определение следующим фрагментом:
...
func ScrapeWithGoquery() {
// Define the proxy server with username and password
proxyUsername := "username" //Your residential proxy username
proxyPassword := "your_password" //Your Residential Proxy password here
proxyHost := "server_host" //Your Residential Proxy Host
proxyPort := "server_port" //Your Port here
proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)
// Parse the proxy URL
...
Затем необходимо изменить транспорт HTTP-клиента, указав конфигурацию, позволяющую игнорировать проверку сертификата SSL/TLS прокси-сервера. Начните с добавления пакета crypto/tls
к импорту. Затем замените определение http.Transport
следующим фрагментом после анализа URL-адреса прокси-сервера:
...
func ScrapeWithGoquery() {
// Parse the proxy URL
...
//Create an http.Transport that uses the proxy
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // Disable SSL certificate verification
},
}
// Create an HTTP client with the transport
...
Этот фрагмент кода модифицирует HTTP-клиент, используя транспорт, настроенный для использования локального прокси-сервера. Обязательно замените IP-адрес на IP-адрес вашего прокси-сервера.
Затем запустите эту реализацию, используя следующую команду из каталога проекта:
go run brightdata/goquery.go
Ваши выходные данные должны выглядеть следующим образом:
$ go run brightdata/goquery.go
Article 0: {"category":"Newsletter ✉️","excerpt":"Open source rival to Twitter, a hyped new terminal and a cool new Brave/Chrome feature among many other things.","title":"FOSS Weekly #24.07: Fedora Atomic Distro, Android FOSS Apps, Mozilla Monitor Plus and More"}
Article 1: {"category":"Explain","excerpt":"Intel makes things confusing, I guess. Let's try making the processor naming changes simpler.","title":"Intel Processor Naming Changes: All You Need to Know"}
Article 2: {"category":"Linux Commands","excerpt":"The Cut command lets you extract a part of the file to print without affecting the original file. Learn more here.","title":"Cut Command Examples"}
Article 3: {"category":"Raspberry Pi","excerpt":"A UART attached to your Raspberry Pi can help you troubleshoot issues with your Raspberry Pi. Here's what you need to know.","title":"Using a USB Serial Adapter (UART) to Help Debug Your Raspberry Pi"}
Article 4: {"category":"Newsletter ✉️","excerpt":"Damn Small Linux resumes development after 16 years.","title":"FOSS Weekly #24.06: Ollama AI, Zorin OS Upgrade, Damn Small Linux, Sudo on Windows and More"}
Article 5: {"category":"Tutorial","excerpt":"Zorin OS now provides a way to upgrade to a newer major version. Here's how to do that.","title":"How to upgrade to Zorin OS 17"}
Article 6: {"category":"Ubuntu","excerpt":"Learn the logic behind each step you have to follow for adding an external repository in Ubuntu and installing packages from it.","title":"Installing Packages From External Repositories in Ubuntu [Explained]"}
Article 7: {"category":"Troubleshoot 🔬","excerpt":"Getting 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.","title":"How to Free Up Space in /boot Partition on Ubuntu Linux?"}
Article 8: {"category":"Ubuntu","excerpt":"Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}
Check 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]
Вы заметите, что, несмотря на то, что вы просматриваете одни и те же статьи, проверка IP-адреса прокси-сервера выдала другую информацию, указывающую на переход из другого места или страны.
Использование Colly с резидентным прокси-сервером Bright Data
Несмотря на то, что пакет Colly не предлагает способа программного отключения проверки SSL/TLS, он дает вам возможность предоставить собственный транспорт
HTTP-клиенту.
Открыв файл colly.go
в своем редакторе или IDE, вставьте следующие строки кода после инициализации нового сборщика внутри функции ScrapeWithColly()
(не забудьте добавить импорт net/url
и net/http
):
...
func ScrapeWithColly() {
...
//Create an http.Transport that uses the proxy
transport := &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true, // Disable SSL certificate verification
},
}
// Set the collector instance to use the configured transport
c.WithTransport(transport)
...
Этот фрагмент определяет HTTP-транспорт с отключенной проверкой SSL и использует метод WithTransport()
в Colly для настройки транспорта сборщика сетевых запросов.
Измените переменную proxyStr
так, чтобы она содержала учетные данные резидентного прокси-сервера (как и в случае с goquery). Замените строку proxyStr
следующим фрагментом:
...
// Define the proxy server with username and password
proxyUsername := "username" //Your residential proxy username
proxyPassword := "your_password" //Your Residential Proxy password here
proxyHost := "server_host" //Your Residential Proxy Host
proxyPort := "server_port" //Your Port here
proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)
...
Не забудьте заменить строковые значения значениями со страницы «Параметры доступа» вашего резидентного прокси-сервера.
Потом запустите эту реализацию, используя следующую команду из каталога проекта:
go run brightdata/colly.go
go run brightdata/colly.go
…
Check 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]
В части выходных данных «Проверьте IP-адрес прокси-сервера» вы заметите смену страны, несмотря на то, что используются те же учетные данные.
Использование Selenium с резидентным прокси-сервером Bright Data
При работе с Selenium необходимо изменить определение selenium.Proxy{}
, чтобы использовать строку URL-адреса прокси-сервера с учетными данными. Замените текущее определение прокси-сервера следующим:
...
// Define the proxy server with username and password
proxyUsername := "username" //Your residential proxy username
proxyPassword := "your_password" //Your Residential Proxy password here
proxyHost := "server_host" //Your Residential Proxy Host
proxyPort := "server_port" //Your Port here
proxyStr := fmt.Sprintf("http://%s:%s@%s:%s", url.QueryEscape(proxyUsername), url.QueryEscape(proxyPassword), proxyHost, proxyPort)
// Define proxy settings
proxy := selenium.Proxy{
Type: selenium.Manual,
HTTP: proxyStr,
SSL: proxyStr,
}
...
Не забудьте импортировать пакет
net/url
.
Этот фрагмент определяет различные параметры прокси-сервера и объединяется для создания URL-адреса прокси-сервера, используемого в конфигурации прокси-сервера.
Теперь необходимо настроить Chrome WebDriver с опциями отключения проверки SSL при использовании резидентного прокси-сервера, как это было сделано в предыдущих реализациях. Для этого измените аргументы определения chromeCaps
, включив в них опцию --ignore-certificate-errors
следующим образом:
...
caps.AddChrome(chrome.Capabilities{Args: []string{
"--headless=new", // Start browser without UI as a background process
"--ignore-certificate-errors", // // Disable SSL certificate verification
}})
...
По умолчанию Selenium не поддерживает аутентифицированную конфигурацию прокси-сервера. Однако вы можете обойти эту проблему, используя небольшой пакет для создания расширения Chrome для аутентифицированного прокси-соединения.
Сначала добавьте пакет в свой проект, используя команду go get
:
go get https://github.com/rexfordnyrk/proxyauth
Затем импортируйте пакет в файл brightdata/selenium.go
, добавив строку «github.com/rexfordnyrk/proxyauth»
в блок импорта в верхней части файла.
Затем вам необходимо создать расширение Chome с помощью метода BuildExtension()
из пакета proxyauth и передать его вместе со своими учетными данными резидентного прокси-сервера Bright Data. Для этого вставьте следующий фрагмент кода после определения chromeCaps
, но перед строкой caps.AddChrome(chromeCaps)
:
…
//Building proxy auth extension using BrightData Proxy credentials
extension, err := proxyauth.BuildExtention(proxyHost, proxyPort, proxyUsername, proxyPassword)
if err != nil {
log.Fatal("BuildProxyExtension Error:", err)
}
//including the extension to allow proxy authentication in chrome
if err := chromeCaps.AddExtension(extension); err != nil {
log.Fatal("Error adding Extension:", err)
}
…
Этот фрагмент кода создает расширение Chrome и добавляет его в Chrome WebDriver, чтобы разрешить аутентифицированные веб-запросы с помощью предоставленных учетных данных прокси-сервера.
Эту реализацию можно запустить с помощью следующей команды из каталога проекта:
go run brightdata/selenium.go
Ваш результат должен выглядеть следующим образом:
$ go run brightdata/selenium.go
Article 0: {"categoryText":"Newsletter ✉️","excerpt":"Check out the promising new features in Ubuntu 24.04 LTS and a new immutable distro.","title":"FOSS Weekly #24.08: Ubuntu 24.04 Features, Arkane Linux, grep, Fedora COSMIC and More"}
…
Article 8: {"categoryText":"Ubuntu","excerpt":"Wondering which Ubuntu version you’re using? Here’s how to check your Ubuntu version, desktop environment and other relevant system information.","title":"How to Check Ubuntu Version Details and Other System Information"}
Check Proxy IP {"ip":"176.45.169.166","country":"SA","asn":{"asnum":25019,"org_name":"Saudi Telecom Company JSC"},"geo":{"city":"Riyadh","region":"01","region_name":"Riyadh Region","postal_code":"","latitude":24.6869,"longitude":46.7224,"tz":"Asia/Riyadh","lum_city":"riyadh","lum_region":"01"}}
Опять же, если вы посмотрите на информацию об IP-адресе в нижней части выходных данных, вы заметите, что для отправки запроса также используется другая страна. Это показывает, что ротация прокси-серверов Bright Data работает.
Как видите, использовать Bright Data в приложении Go очень просто. Сначала вы создаете резидентный прокси-сервер на платформе Bright Data и получаете свои учетные данные. Затем вы меняете код с учетом этой информации, чтобы использовать прокси-сервер для взаимодействия с Интернетом.
Заключение
Веб-прокси-серверы являются важным компонентом персонализированного взаимодействия пользователей в Интернете. Из этой статьи вы узнали все о прокси-серверах и о том, как настроить собственный прокси-сервер с помощью Squid. Вы также узнали, как интегрировать локальный прокси-сервер в приложения Go, в данном случае в веб-парсер.
Если вас интересует работа с прокси-серверами, вам следует рассмотреть возможность использования Bright Data. Эта современная прокси-сеть позволяет быстро собирать данные, не беспокоясь о дополнительной инфраструктуре или обслуживании.