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
