Rotasi IP Address dengan Free Proxy List – Scraping

By | February 12, 2024
2,209 Views

Rotasi IP Address dengan Free Proxy List – Proxy sangat berguna sekali terutama dalam melakukan rotasi IP secara otomatis. Secara umum bila kalian googling dengan kata kunci free proxy list akan banyak tersaji beragam penyedia proxy gratisan. Salah satunya yaitu https://free-proxy-list.net/. Pada pembahasan sebelumnya yaitu Rotasi IP Address dengan Proxy dan Jaringan TOR telah tersaji alamat proxy yang sudah ada. Namun kita akan mengguanakan teknik scraping untuk menyimpan alamat Proxy secara otomatis lalu kalian bisa improve untuk cek menggunakan  Rotasi IP Address dengan Proxy dan Jaringan TOR

Berikut akan saya buatkan scraping menggunakan python saja agar mudah dengan hasilnya nanti berupa tabel data frame yang bisa kalian simpan dalam bentuk CSV.

import requests 
import pandas as pd
from bs4 import BeautifulSoup
target = "https://free-proxy-list.net/"
session = requests.Session()
#user agent 
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'en-US,en;q=0.9',
    'cache-control': 'max-age=0',
    'referer': 'https://www.whatismyip.com/52.242.97.97/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}    

result = session.get(target,headers = headers)
soup = BeautifulSoup(result.text)
# table = soup.find("table", attrs={"class":"details"})
#temukan tag table di HTML
table = soup.find("table")
#dapatkan header table
headings = [th.get_text() for th in table.find("tr").find_all("th")]

data = []
for row in table.find_all('tr'):
    row_data = []
    for cell in row.find_all('td'):
        row_data.append(cell.text)
    data.append(row_data)
    
data.pop(0) #hilangkan record pertama
df = pd.DataFrame(data,columns=headings)
print(df)

Scraping Ratusan atau Puluhan Ribu Proxy

Tentu mengumpulkan alamat proxy yang banyak membutuhkan cara yang lebih baik, selain menggunakan beragam scraping dari banyak penyedia free proxy maka melalui script diatas sebenarnya kita bisa melakukan improvement dengan cara menyimpan hasilnya dalam bentuk database Sqlite.

Sehingga menggunakan column bersifat Primary Key akan bisa menampung ratusan / puluhan ribu free proxy list yang siap pakai! serta menggunakan service seperti sleep tiap 10 menit untuk melakukan scraping dan hasilnya akan secara otomatis tersimpan didalam database.

See also  Msfconsole Wifi Access

nanti akan saya teruskan cara membuat database nya

Membuat function scraping dan menyimpannya kedalam database

Langsung saja, kita akan merapikan kode diatas menjadi sebuah function

import requests 
import pandas as pd
from bs4 import BeautifulSoup

def perayapan():
    target = "https://free-proxy-list.net/"
    session = requests.Session()
    #user agent 
    headers = {
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'en-US,en;q=0.9',
        'cache-control': 'max-age=0',
        'referer': 'https://www.whatismyip.com/52.242.97.97/',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
    }    
    
    result = session.get(target,headers = headers)
    soup = BeautifulSoup(result.text)
    # table = soup.find("table", attrs={"class":"details"})
    #temukan tag table di HTML
    table = soup.find("table")
    #dapatkan header table
    headings = [th.get_text() for th in table.find("tr").find_all("th")]
    
    data = []
    for row in table.find_all('tr'):
        row_data = []
        for cell in row.find_all('td'):
            row_data.append(cell.text)
        data.append(row_data)
        
    data.pop(0) #hilangkan record pertama
    df = pd.DataFrame(data,columns=headings)
    #print(df)
    
    #df.loc[0,'Https']
    
    df = df.assign(ip = ['https://' if Https == 'yes' else 'http://' for Https in df['Https']])
    df['ip']= df['ip']+df['IP Address']+":"+df['Port']
    return df

Kemudian kita membuat database Sqlite untuk menyimpan data diatas dan IP adrress diatas akan disimpan Unique

import sqlite3
from sqlite3 import Error

class DB():
    def __init__(self,db_file):
        self.db_file = db_file
        self.conn =  None
        self.sql_buat_tabel = """ CREATE TABLE IF NOT EXISTS proxylist (
                                            id integer PRIMARY KEY,
                                            ip text NOT NULL
                                        ); """
        self.buka()
        self.buat_tabel()

    def buka(self):
        try:
            self.conn = sqlite3.connect(self.db_file)
            return self.conn
        except Error as e:
            print(e)
        return self.conn
    
    def buat_tabel(self):
        try:
            c = self.conn.cursor()
            c.execute(self.sql_buat_tabel)
        except Error as e:
            print(e)
    
    def masukan_data(self,ip):
        if self.cek(ip)==False:
            sql = ''' INSERT INTO proxylist(ip)
                      VALUES(?) '''
            cur = self.conn.cursor()
            cur.execute(sql, (ip,))
            self.conn.commit()
    
    def cek(self,ip):
        cur = self.conn.cursor()
        cur.execute("SELECT * FROM proxylist WHERE ip=?", (ip,))
    
        rows = cur.fetchall()
        result = True
        if len(rows)==0:
            result =  False
        return result
    
    def show(self):
        cur = self.conn.cursor()
        cur.execute("SELECT * FROM proxylist")
        rows = cur.fetchall()
        for row in rows:
            print(row)

    def delete (self,ip):
        cur = self.conn.cursor()
        cur.execute("DELETE FROM proxylist WHERE ip=?", (ip,))
        self.conn.commit()

habis itu, kita akan lakukan scraping untuk time.sleep(20*60) alias 20 menit sekali melakukan perayapan

from time import sleep

for i in range(1,100):
   print("i ",i)
   sleep(20*60) #20 menit sekali melakukan perayapan
   df = perayapan()
   print("jumlah data: ",len(df))
   database = r"proxy list.db"
   db = DB(database)
   for ip in df['ip']:
       #print(ip)
       db.masukan_data(ip)
   #db.show()
   db.conn.close()

Berikut hasil yang saya dapatkan setelah hampir 20 jam melakukan scraping per 10 menit terdapat 1.660 an IP Proxy yang kalian gunakan untuk Rotasi IP Address dengan Free Proxy List

See also  Pakai Browser TOR untuk Anonim di Akses Web