Beranda BlogPengikisan web Cara menggunakan dan memutar proxy dengan Python

Cara menggunakan dan memutar proxy dengan Python

oleh Kadek

2. Menggunakan dan memutar proxy dengan Python (metode tradisional)

Dengan metode sederhana di belakang kita, mari kita lihat pendekatan yang lebih tradisional terhadap rotasi proxy dengan Python. Seperti yang akan segera Anda lihat, metode ini jauh lebih rumit dan memerlukan banyak waktu serta perhatian agar dapat bekerja dengan lancar.

Langkah 1. Menyiapkan prasyarat

Pastikan Python diinstal pada sistem Anda. Untuk tutorial ini Anda dapat menggunakan Python versi 3.6 atau lebih tinggi. Buat direktori baru untuk menyimpan semua kode untuk proyek ini dan buat a

$ mkdir proxy_rotator
$ cd proxy_rotator
$ touch app.py

Permintaan juga harus diinstal. Ini mudah dilakukan melalui PIP:

Langkah 2. Bagaimana cara membuat daftar proxy?

Sebelum Anda dapat merotasi proxy, Anda memerlukan daftar proxy. Ada berbagai daftar yang tersedia di Internet. Beberapa dari mereka berbayar, yang lain gratis. Masing-masing mempunyai kelebihan dan kekurangan masing-masing. Sumber proxy gratis yang sangat terkenal adalah Daftar Proxy Gratis. Masalah terbesar dengan proxy dari daftar gratis tersebut adalah sebagian besar dari mereka mungkin sudah diblokir oleh situs target Anda. Oleh karena itu, Anda perlu melakukan beberapa tes untuk memastikan bahwa proxy yang Anda gunakan tidak diblokir.

Anda dapat mengunduh daftar proxy dari Daftar Proxy Gratis ke file TXT.

catatan: Jika Anda memilih metode sederhana yang dijelaskan sebelumnya dalam artikel ini, Anda akan senang mengetahui bahwa ScraperAPI secara otomatis memonitor semua proxy untuk memastikan bahwa mereka tidak diblokir oleh situs web target!

Langkah 3. Buat permintaan tanpa proxy

Pertama, mari kita lihat cara membuat permintaan menggunakan permintaan tanpa proxy. Anda dapat melakukan ini dengan dua cara berbeda. Anda dapat menggunakan metode request.get (atau yang serupa) secara langsung, atau membuat sesi dan menggunakannya untuk mengirim permintaan.

Permintaan langsung dengan “requests.get” dapat dilakukan sebagai berikut:

import requests 
html = requests.get("https://yasoob.me")
print(html.status_code)
# output: 200

Permintaan yang sama dengan Sesi dapat dibuat seperti ini:

import requests
s = requests.Session()
html = s.get("https://yasoob.me")
print(html.status_code)
# Output: 200

Penting untuk membahas kedua metode tersebut karena proses penggunaan proxy sedikit berbeda untuk kedua metode.

Langkah 4. Menggunakan proxy dengan permintaan

Sangat mudah menggunakan proxy untuk permintaan. Yang perlu Anda lakukan hanyalah menyediakan kamus permintaan yang berisi kunci HTTP dan HTTPS serta URL proksi yang sesuai. Anda dapat menggunakan URL proksi yang sama untuk kedua protokol.

catatan: Karena artikel ini menggunakan proxy gratis, URL proxy di blok kode mungkin tidak lagi berfungsi saat Anda membacanya. Anda dapat bergabung dengan mengganti URL proxy dalam contoh kode dengan proxy yang berfungsi dari Daftar Proxy Gratis.

Berikut ini contoh kode untuk menggunakan proxy dalam permintaan tanpa membuat objek sesi:

import requests

proxies = {
   'http': 'http://47.245.97.176:9000',
   'https': 'http://47.245.97.176:9000',
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)
# Output: {
#  "origin": "47.245.97.176"
# }

Dan berikut adalah contoh yang sama dengan objek Session:

import requests

proxies = {
   'http': 'http://47.245.97.176:9000',
   'https': 'http://47.245.97.176:9000',
}

s = requests.Session()
s.proxies = proxies
response = s.get('https://httpbin.org/ip')
print(response.text)
# Output: {
#  "origin": "47.245.97.176"
# }

Mendapatkan hal ini adalah hal yang biasa CERTIFICATE_VERIFY_FAILED SSL Kesalahan saat menggunakan proxy gratis. Seperti inilah kesalahannya:

requests.exceptions.SSLError: HTTPSConnectionPool(host='httpbin.org', port=443): Max retries exceeded with url: /ip (Caused by SSLError(SSLCertVerificationError(1, '(SSL: CERTIFICATE_VERIFY_FAILED) certificate verify failed: unable to get local issuer certificate (_ssl.c:997)')))

Anda dapat mengatasi kesalahan ini dengan meneruskannya verify=False ke metode get seperti ini:

requests.get('https://httpbin.org/ip', proxies=proxies, verify=False)

# or

s.get('https://httpbin.org/ip', verify=False)

Langkah 5. Menggunakan proxy yang diautentikasi dengan permintaan

Menggunakan proxy yang diautentikasi sama mudahnya saat membuat permintaan. Yang perlu Anda lakukan hanyalah memodifikasi kamus proxy dan menentukan nama pengguna dan kata sandi untuk setiap URL proxy:

proxies = {
   'http': 'http://username:[email protected]:8080',
   'https': 'http://username:[email protected]:8081',
}

Pengganti username Dan password dengan referensi dan Anda dapat memulai. Kode lainnya untuk mengirim permintaan tetap sama seperti contoh kode sebelumnya.

Langkah 6. Mengatur proxy melalui variabel lingkungan

Anda juga dapat menggunakan proxy tanpa menambahkan kode khusus proxy ke Python. Hal ini dimungkinkan dengan menetapkan variabel lingkungan yang sesuai. Pertanyaan menghormati HTTP_PROXY Dan HTTPS_PROXY Variabel lingkungan. Jika ini disetel, permintaan akan menggunakan nilainya yang sesuai sebagai URL proksi yang sesuai.

Anda dapat mengatur variabel lingkungan ini dalam sistem mirip Unix dengan membuka terminal dan mengetikkan kode ini:

export HTTP_PROXY='http://47.245.97.176:9000'
export HTTPS_PROXY='http://47.245.97.176:9000'

Sekarang Anda dapat menghapus kode khusus proksi apa pun dari program Python Anda dan program tersebut akan secara otomatis menggunakan titik akhir proksi yang ditetapkan melalui variabel lingkungan ini!

Cobalah dengan menjalankan kode ini dan pastikan outputnya cocok dengan set titik akhir proksi melalui variabel lingkungan:

import requests

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)
# Output: {
#  "origin": "47.245.97.176"
# }

Langkah 7. Putar proxy untuk setiap permintaan

Seperti disebutkan di pendahuluan, proxy juga dapat diblokir. Oleh karena itu, penting untuk merotasi proxy dan mencoba untuk tidak menggunakan satu proxy untuk banyak permintaan. Mari kita lihat cara merotasi proxy dengan Python menggunakan permintaan.

Memuat proxy dari daftar proxy

Pertama, simpan proxy dari Daftar Proxy Gratis menjadi satu proxy_list.txt berkas di proxy_rotator Direktori. Seperti inilah tampilan filenya:

196.20.125.157:8083
47.245.97.176:9000
54.39.132.131:80
183.91.3.22:11022
154.236.179.226:1981
41.65.46.178:1981
89.175.26.210:80
61.216.156.222:60808
115.144.99.220:11116
...
167.99.184.232:3128

Sekarang buka itu app.py file dan tulis kode berikut untuk memuat proxy ini ke dalam daftar:

def load_proxy_list():
    with open("proxy_list.txt", "r") as f:
        proxy_list = f.read().strip().split()
    return proxy_list

Periksa apakah proksi berfungsi

Sekarang setelah Anda memiliki daftar proxy, penting untuk menguji apakah semua proxy dalam daftar berfungsi dan menghapus proxy yang tidak berfungsi. Anda dapat mengujinya dengan mengirimkan permintaan ke httpbin melalui proxy dan memastikan responsnya berisi IP proxy. Jika permintaan gagal karena alasan apa pun, Anda dapat membuang proxy tersebut.

Anda dapat menambahkan lebih banyak detail pada proses pembuangan dengan memastikan bahwa permintaan gagal karena masalah pada proksi dan bukan masalah jaringan yang tidak terkait. Pertama, mari kita buat semuanya tetap sederhana dan buang proxy ketika terjadi kesalahan (pengecualian). Berikut ini beberapa kode yang melakukan hal ini:

def check_proxy(proxy_string):
    proxies = {
    'http': f'http://{proxy_string}',
    'https': f'http://{proxy_string}',
    }

    try:
        response = requests.get('https://httpbin.org/ip', proxies=proxies, timeout=30)
        if response.json()('origin') == proxy_string.split(":")(0):
            # Proxy works
            return True
        # Proxy doesn't work
        return False
    except Exception:
        return False

Kodenya cukup sederhana, Anda meneruskan string proxy (mis. 0.0.0.0:8080). check_proxy sebagai argumen, lalu check_proxy mengirimkan permintaan ke httpbin.org/ip melalui proxy yang diteruskan. Jika respons berisi IP proksi, True akan dikembalikan. Jika tidak (atau permintaan gagal), False dikembalikan. Batas waktu juga ditentukan dalam kode untuk setiap permintaan. Jika respons tidak diterima dalam batas waktu yang ditentukan, pengecualian akan diberikan. Ini memastikan bahwa Anda tidak mendapatkan proxy yang lambat.

Putar proxy untuk setiap permintaan

Anda sekarang dapat memasangkan fungsi dalam dua daftar kode sebelumnya dan menggunakannya untuk merotasi proxy pada setiap permintaan. Berikut ini salah satu cara yang mungkin untuk melakukan ini:

from random import choice

def get_working_proxy():
    random_proxy = choice(proxy_list)
    while not is_proxy_working(random_proxy):
        proxy_list.remove(random_proxy)
        random_proxy = choice(proxy_list)
    return random_proxy

def load_url(url):
    proxy = get_working_proxy()
    proxies = {
        'http': f'http://{proxy}',
        'https': f'http://{proxy}',
    }
    response = requests.get(url, proxies=proxies)
    
    # parse the response
    # ...

    return response.status_code

urls_to_scrape = (
    "https://news.ycombinator.com/item?id=36580417",
    "https://news.ycombinator.com/item?id=36575784",
    "https://news.ycombinator.com/item?id=36577536",
    # ...
)
proxy_list = load_proxy_list()

for url in urls_to_scrape:
    print(load_url(url))

Mari kita analisa sedikit kode ini. Ini berisi satu get_working_proxy() Fungsi yang memilih proksi acak dari daftar proksi, memeriksa apakah proksi berfungsi, lalu mengembalikannya. Jika proksi tidak berfungsi seperti yang diharapkan, fungsi akan menghapus proksi tersebut dari daftar proksi. Lalu ada ini load_url() Fungsi. Ia mendapat proxy yang berfungsi dengan menelepon get_working_proxy() berfungsi dan menggunakan proksi yang dikembalikan untuk meneruskan permintaan ke URL tujuan. Terakhir, ada kode untuk memulai proses scraping. Penting untuk dicatat bahwa proxy acak digunakan untuk setiap permintaan, yang membantu menyebarkan beban scraping ke beberapa proxy.

Cara meningkatkan rotator proxy

Ada banyak hal yang dapat Anda lakukan untuk meningkatkan rotator proxy naif yang Anda buat sejauh ini. Hal pertama yang dapat Anda lakukan adalah memfaktorkan ulang kode penanganan pengecualian dan memastikan bahwa proksi hanya dibuang ketika proksi tersebut rusak. Pilihan lainnya adalah memeriksa kembali proxy yang dibuang setelah beberapa saat. Secara umum, siklus proksi gratis antara negara bekerja dan tidak bekerja terlalu sering. Anda juga dapat menambahkan logika untuk memuat proxy langsung dari situs web Daftar Proxy Gratis alih-alih menyimpannya secara manual ke file TXT terlebih dahulu.

Diploma

Jadi, Anda telah mempelajari cara menggunakan, mencari sumber, memverifikasi, dan merotasi proxy dengan permintaan dengan Python. Sekarang Anda mungkin bertanya-tanya metode apa yang terbaik untuk digunakan dengan proxy. Anda dapat memilih rute yang lebih tradisional, namun Anda harus bersiap untuk mengoptimalkan kode lebih sering dan terus-menerus mengawasi pembaruan proxy. Hal ini pada akhirnya mungkin memakan waktu terlalu lama dan mengganggu alur pengumpulan data Anda. Sebaiknya gunakan alat yang melakukan rotasi proxy untuk Anda sehingga Anda bisa mendapatkan data yang Anda perlukan dengan cepat dan dalam skala besar.

Coba ScraperAPI dan dapatkan 5.000 kredit gratis saat Anda mendaftar!

Pos terkait

Tinggalkan Komentar