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.
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