Selenium adalah perpustakaan sumber terbuka yang populer untuk otomatisasi, pengujian, dan pengikisan browser web. Ini tersedia dalam sebagian besar bahasa pemrograman populer termasuk Python. Karena kemudahan penggunaan dan komunitas aktifnya, Selenium adalah pilihan pertama untuk tugas otomatisasi web.
Dalam artikel ini, kami mendalami dunia penggunaan proxy dengan Selenium untuk meningkatkan keamanan dan efisiensi upaya web scraping Anda. Kami akan membahas topik mulai dari dasar-dasar penggunaan proxy dengan Selenium hingga topik lanjutan.
Daftar Isi
Mengapa menggunakan proxy dengan Selenium?
Server proxy bertindak sebagai perantara antara Anda dan sumber daya Internet yang Anda akses. Saat Anda meminta situs web, komputer Anda mengirimkan permintaan tersebut ke server proxy, bukan langsung ke situs web. Server proxy kemudian meneruskan permintaan tersebut ke situs web dan menerima respons. Terakhir, server proxy mengirimkan respons kembali ke komputer Anda.
Ada banyak jenis server proxy, masing-masing dengan kelebihan dan kekurangannya. Beberapa server proxy dirancang untuk meningkatkan keamanan, sementara yang lain dirancang untuk meningkatkan anonimitas. Beberapa server proxy juga dirancang untuk menyimpan konten dalam cache, sehingga dapat meningkatkan kinerja. Namun, karena kami telah membahas berbagai jenis proxy secara mendetail, kami tidak akan membahasnya secara detail di sini.
Ada beberapa alasan penting mengapa penggunaan proxy untuk web scraping itu penting:
- Cegah pemblokiran alamat IP dan CAPTCHA.
- Lewati pembatasan geografis dan lokalkan permintaan.
- Sembunyikan alamat IP asli Anda dan tingkatkan anonimitas.
Mari kita periksa masing-masing poin ini secara lebih rinci.
Mencegah larangan IP dan captcha
Saat melakukan scraping, penggunaan proxy sangat penting untuk melewati blok alamat IP dan interupsi CAPTCHA. Seperti disebutkan sebelumnya, server proxy bertindak sebagai perantara antara Anda dan situs target. Dengan cara ini, jika alamat IP Anda diblokir, pembatasan akses akan berlaku untuk server proxy dan bukan IP Anda yang sebenarnya. Untuk melanjutkan scraping, Anda cukup beralih ke proxy lain.
Berurusan dengan CAPTCHA bahkan lebih mudah. Daripada menyelesaikan CAPTCHA sambil melakukan scraping, Anda dapat mencoba menghindarinya sama sekali hanya dengan mengubah proxy saat muncul. Namun, penting untuk dicatat bahwa metode ini hanya berfungsi jika Anda menggunakan proxy berkualitas tinggi, sebaiknya proxy perumahan.
Melewati batasan geografis
Proxy memungkinkan Anda melewati pembatasan geografis dan mengakses konten yang mungkin diblokir atau dibatasi tergantung pada lokasi Anda. Dengan merutekan lalu lintas Anda melalui server proxy di wilayah atau negara lain, Anda dapat terlihat seolah-olah Anda terhubung ke Internet dari lokasi tersebut, sehingga melewati pembatasan geografis.
Meningkatkan anonimitas dan keamanan
Alasan lain untuk menggunakan proxy adalah untuk meningkatkan keamanan dan anonimitas saat melakukan scraping. Namun, perlu diingat bahwa tidak semua proxy dapat meningkatkan keamanan Anda. Misalnya, proxy gratis biasanya lebih banyak merugikan daripada menguntungkan dalam kasus ini. Mereka sering kali tidak terlindungi, tidak stabil, memiliki kecepatan transfer data yang lambat, dan bahkan mungkin memantau lalu lintas Anda dan menjualnya ke pihak ketiga.
Di sisi lain, proxy berkualitas tinggi dapat membuat kehadiran online Anda anonim dan aman. Beberapa server proxy menawarkan enkripsi yang mengacak data Anda ke dalam format yang tidak dapat dibaca, melindunginya dari intersepsi oleh pihak ketiga. Hal ini sangat penting terutama jika Anda menggunakan jaringan Wi-Fi publik yang mungkin membahayakan data Anda.
persyaratan
Sebelum kita beralih ke contoh penggunaan proxy dengan Selenium, kita perlu memastikan bahwa semua komponen yang diperlukan telah diinstal di komputer Anda. Untuk artikel ini Anda memerlukan Python 3, untuk tutorial instalasi lengkap lihat Dasar-dasar Python Scraping. Selain itu, jika Anda tertarik menggunakan proksi dengan pustaka Permintaan, Anda dapat melihat cara menggunakan proksi dalam permintaan Python.
Untuk menginstal Selenium, Anda dapat menggunakan manajer paket dan menjalankan perintah berikut di terminal:
pip install selenium
Anda kemudian memerlukan Chromedriver atau driver web lain dengan versi yang sama dengan browser yang diinstal di komputer Anda. Dalam artikel scraping Selenium Anda akan menemukan instruksi terperinci dan semua tautan yang diperlukan ke driver web untuk berbagai browser.
Menyiapkan proxy di Selenium
Mari jelajahi berbagai cara menggunakan proxy dengan Selenium, serta perbedaan penggunaan berdasarkan jenis proxy yang Anda pilih. Ada dua pendekatan utama untuk menghubungkan proxy di Selenium:
- Manfaatkan fitur bawaan Selenium dan tambahkan proxy menggunakan opsi.
- Penggunaan perpustakaan pihak ketiga untuk manajemen proxy, seperti: B.Kawat Selenium.
Pada artikel ini kita akan melihat kedua metode tersebut, namun pilihannya pada akhirnya bergantung pada pengetahuan dan kebutuhan proyek Anda.
Konfigurasi proksi Selenium bawaan
Pertama, mari kita jelajahi bagaimana Anda dapat memanfaatkan fungsionalitas bawaan Selenium untuk membuat koneksi proxy. Pertama kita mengimpor perpustakaan yang diperlukan:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
Selanjutnya, mari buat variabel untuk menyimpan data proxy:
proxy_server = "proxy_address:port"
Mari buat objek opsi dan isi dengan informasi proxy:
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=%s' % proxy_server)
Selanjutnya, buat instance driver web dengan opsi yang ditentukan:
driver = webdriver.Chrome(options=options)
Proses lebih lanjut dalam bekerja dengan driver web tetap sama seperti yang dijelaskan dalam artikel kami tentang pengikisan Selenium.
Penggunaan perpustakaan pihak ketiga
Untuk manajemen proksi tingkat lanjut, termasuk mencegat dan memodifikasi permintaan jaringan, Anda dapat menggunakan perpustakaan pihak ketiga seperti Selenium Wire. Untuk menggunakannya, Anda perlu menginstal modul tambahan:
Pasang kawat pip selenium
Untuk menggunakan paket ini, Anda harus menginstal Python 3.7 atau lebih baru dan Selenium 4.0.0 atau lebih baru di komputer Anda. Kami akan mengganti impor driver web dan membiarkan skrip lainnya tidak berubah:
from seleniumwire import webdriver
proxy_server = "proxy_address:port"
driver = webdriver.Chrome()
Tentukan proksi:
driver.scopes = ((webdriver.request.Proxy(), 'http://' + proxy_server))
Setelah ini selesai, navigasi halaman dan pemrosesan data dapat dilakukan.
Konfigurasikan proxy HTTP, HTTPS, dan SOCKS5
Konfigurasi proxy di Selenium WebDriver memungkinkan Anda merutekan lalu lintas web melalui server proxy menggunakan berbagai protokol. Bagian ini tidak membahas detail protokol-protokol ini, melainkan berfokus pada penggunaan proxy apa pun protokolnya.
Proksi HTTP dan HTTPS pada dasarnya sama, hanya saja proksi HTTPS aman sedangkan proksi HTTP tidak. Mereka juga digunakan dengan cara yang sangat mirip:
proxy_server = "116.203.28.43:80"
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://%s' % proxy_server)
options.add_argument('--proxy-server=https://%s' % proxy_server)
Tidak seperti proksi HTTP dan HTTPS, proksi SOCKS dan SOCKS5 dapat menangani permintaan UDP, menjadikannya lebih fleksibel. Untuk menggunakannya, tentukan jenis proksi saat mengonfigurasi opsi:
options.add_argument('--proxy-server=socks5://%s' % socks5_proxy)
Seperti yang Anda lihat, Selenium mendukung semua jenis proxy dan impornya dilakukan dengan cara yang sama. Satu-satunya perbedaan adalah saat mengimpor, Anda perlu menentukan jenis proxy yang Anda gunakan.
Menggunakan Selenium dengan proxy
Mari kita lihat contoh penggunaan proxy dengan dan tanpa otentikasi. Untuk membuat contoh lebih jelas, kami membuat permintaan ke situs web httpbin, yang akan mengembalikan respons JSON dengan alamat IP kami saat ini. Ini akan membantu kami memverifikasi fungsionalitas proxy dan membuat contoh lebih jelas.
Proksi yang tidak diautentikasi
Proxy gratis adalah proxy yang tidak memerlukan nama pengguna dan kata sandi untuk mengaksesnya. Ini adalah jenis proxy yang digunakan pada contoh sebelumnya. Meskipun nyaman, namun sering kali tidak dapat diandalkan dan mudah diblokir.
Mari kita modifikasi salah satu script yang telah dibahas sebelumnya untuk mengakses website httpbin. Berikut cara menggunakan proxy gratis untuk membuat permintaan:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
proxy_server = "116.203.28.43:80"
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://%s' % proxy_server)
driver = webdriver.Chrome(options=options)
driver.get('https://httpbin.org/ip')
Selanjutnya, kami mengambil semua konten halaman web dan menampilkannya di layar:
page_source = driver.page_source
print("Page title:", page_source)
Pastikan driver web ditutup dengan benar di akhir skrip:
driver.quit()
Saat Anda menjalankan skrip, jendela browser yang dikendalikan oleh driver web akan terbuka dan hasilnya ditampilkan pada baris perintah atau terminal:
Untuk menguji skrip ini, Anda dapat menggunakan daftar proxy gratis dan terkini kami.
Proksi yang diautentikasi
Otentikasi proxy di Selenium melibatkan penyediaan kredensial (nama pengguna dan kata sandi) untuk mengakses proxy sebelum dapat digunakan untuk merutekan lalu lintas web. Ini biasanya diberikan dalam format URL seperti ini:
http://username:password@proxy_address:port
Selain HTTP, Anda dapat menentukan jenis protokol lain, seperti HTTPS atau SOCKS5. Mari kita ambil contoh sebelumnya dan menggunakan proxy yang diautentikasi:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
proxy_server = "hasdata:^G*(email protected):3132"
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=https://%s' % proxy_server)
driver = webdriver.Chrome(options=options)
driver.get('https://httpbin.org/ip')
page_source = driver.page_source
print("Page title:", page_source)
driver.quit()
Hasilnya kita mendapatkan:
Menggunakan proxy yang diautentikasi jauh lebih aman karena akses tidak sah oleh pihak ketiga dikecualikan. Keamanan yang ditingkatkan ini berasal dari penerapan mekanisme otentikasi yang memverifikasi kredensial pengguna sebelum memberikan akses ke server proxy.
Topik lanjutan
Selain contoh dasar bekerja dengan proxy, mari jelajahi topik lanjutan yang mungkin memerlukan keterampilan dan pengetahuan tambahan, namun dapat meningkatkan kemampuan skrip Anda secara signifikan saat menggunakan proxy di Selenium.
Men-debug
Debugging adalah bagian penting dari pengembangan skrip karena membantu mengidentifikasi dan memperbaiki kesalahan serta menganalisis perilaku skrip dalam berbagai skenario. Misalnya, untuk mencegah skrip berhenti selama eksekusi jika terjadi kesalahan (proxy tidak berfungsi, batas waktu habis, atau alasan lainnya), Anda dapat menggunakan blok try..exclusive:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
proxy_server = "193.242.145.106:3132"
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://%s' % proxy_server)
try:
driver = webdriver.Chrome()
driver.get('https://httpbin.org/ip')
ip_json = driver.find_element(By.TAG_NAME, 'pre').text
print(ip_json)
except Exception as e:
print(e)
finally:
driver.quit()
Kode yang diberikan menangkap dan menampilkan kesalahan apa pun yang terjadi. Namun, Anda dapat menyesuaikan penanganan kesalahan sesuai kebutuhan Anda. Misalnya, Anda dapat memfilter kesalahan untuk hanya menampilkan kesalahan jaringan atau kode kesalahan tertentu. Selain itu, Anda dapat menyesuaikan output untuk hanya menampilkan kode kesalahan atau informasi relevan lainnya.
Itu finally
Blokir memastikan bahwa browser ditutup terlepas dari kesalahan atau pengecualian. Selain itu, mengekstraksi konten teks saja dari halaman akan menghilangkan informasi yang tidak perlu dan menyederhanakan prosesnya.
Mengintegrasikan login ke dalam skrip semakin meningkatkan pelacakan kesalahan dan debugging. Gunakan perpustakaan logging untuk mencatat kesalahan, deskripsinya, dan stempel waktu yang relevan. Log terstruktur ini dapat dianalisis untuk mengidentifikasi pola, masalah yang berulang, dan area yang perlu diperbaiki:
import logging
logging.basicConfig(level=logging.DEBUG)
Dengan menerapkan peningkatan ini, Anda dapat membuat skrip Selenium tangguh yang secara efektif menangani kesalahan, memberikan wawasan berharga, dan menyederhanakan proses debug.
Rotasi proxy
Rotasi proxy adalah teknik yang secara berkala mengubah server proxy yang digunakan untuk permintaan. Ini berguna untuk melewati pemblokiran situs web, meningkatkan keandalan permintaan, dan melindungi anonimitas Anda. Anda dapat membeli proksi bergilir atau menerapkan sistem rotasi proksi dari kumpulan IP.
Dengan rotasi proksi, Anda memiliki kumpulan proksi yang tersedia yang Anda siklus untuk setiap permintaan. Hal ini mengurangi jumlah permintaan yang berasal dari alamat IP yang sama, membuat situs web target terlihat bahwa permintaan tersebut berasal dari perangkat yang berbeda.
Untuk menerapkan rotasi proxy, Anda dapat menggunakan berbagai strategi, antara lain:
- Mengubah proxy setelah setiap permintaan. Metode ini memberikan tingkat anonimitas tertinggi, tetapi mungkin tidak cocok untuk permintaan bervolume tinggi.
- Proksi berubah setelah sejumlah permintaan tertentu. Pendekatan ini menyeimbangkan anonimitas dengan kinerja, sehingga cocok untuk skenario lalu lintas menengah.
- Memilih proxy acak untuk setiap permintaan. Strategi ini menawarkan keseimbangan antara anonimitas dan efisiensi, sehingga ideal untuk aplikasi umum.
Mari terapkan opsi terakhir. Pertama kita mengimpor perpustakaan dan modul yang diperlukan dan juga mendeklarasikan variabel untuk menempatkan daftar proxy:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import random
proxy_servers = (
"116.203.28.43:80",
"117.250.3.58:8080",
"111.206.0.99:8181"
)
Untuk membuat contoh lebih jelas, mari kita definisikan sebuah loop yang melakukan iterasi sebanyak lima kali:
for i in range(5):
Buat permintaan ke situs web httpbin dan pilih proxy secara acak dari kumpulan proxy yang tersedia:
try:
options = Options()
options.add_argument("--proxy-server=http://{}".format(random.choice(proxy_servers)))
driver = webdriver.Chrome(options=options)
driver.get('https://httpbin.org/ip')
ip_json = driver.find_element(By.TAG_NAME, 'pre').text
print(ip_json)
except Exception as e:
print(e)
finally:
driver.quit()
Jalankan skrip dan dapatkan hasilnya:
Dengan cara ini skrip secara acak memilih proxy dari daftar setiap kali dan membuat permintaan. Pendekatan ini meningkatkan kualitas pengikisan dan meningkatkan keandalan skrip Anda.
Diploma
Dalam artikel ini, kami memeriksa prinsip dasar penggunaan proxy dengan Selenium, yang memungkinkan Anda menutupi alamat IP asli Anda saat mengekstraksi data dan mengotomatiskan tindakan browser. Pendekatan ini memberikan keamanan dan anonimitas yang lebih baik secara online dan mengurangi risiko pemblokiran alamat IP asli Anda.
Proksi juga dapat membantu dalam melewati pembatasan geografis, batas permintaan, dan pembatasan lain yang diberlakukan oleh situs web. Rotasi proxy, di sisi lain, dapat meningkatkan keandalan dan anonimitas skrip Anda sekaligus memastikan distribusi beban yang merata di seluruh server proxy. Meskipun proxy menawarkan keuntungan-keuntungan ini, menggunakannya secara efektif dapat menjadi suatu tantangan, terutama ketika menangani tugas-tugas pengikisan yang rumit. Untuk pengalaman pengikisan yang bebas repot dan andal, pertimbangkan untuk menggunakan API pengikisan web HasData.