fupshop-detector / utils /dataset_builder.py
mibrahimalpha's picture
FupShop v2.0 - clean deploy without model files
005c0b0
Raw
History Blame Contribute Delete
2.56 kB
import pandas as pd
from typing import List
from data_collection.collector import PhishingDataCollector
from features.url_features import URLFeatureExtractor
class DatasetBuilder:
def __init__(self, urlhaus_key: str = None):
self.collector = PhishingDataCollector(urlhaus_key=urlhaus_key)
self.extractor = URLFeatureExtractor()
def build_phishing_dataset(self, limit: int = None) -> pd.DataFrame:
print("Fetching phishing URLs...")
data = self.collector.collect()
phishing_urls = data['shopping_phishing']
if limit:
phishing_urls = phishing_urls[:limit]
print(f"Extracting features from {len(phishing_urls)} phishing URLs...")
features = self.extractor.extract_batch(phishing_urls)
df = pd.DataFrame(features)
df['url'] = phishing_urls
df['label'] = 1
return df
def build_legitimate_dataset(self, legitimate_urls: List[str]) -> pd.DataFrame:
print(f"Extracting features from {len(legitimate_urls)} legitimate URLs...")
features = self.extractor.extract_batch(legitimate_urls)
df = pd.DataFrame(features)
df['url'] = legitimate_urls
df['label'] = 0
return df
def build_full_dataset(self, legitimate_urls: List[str]) -> pd.DataFrame:
phishing_df = self.build_phishing_dataset()
legitimate_df = self.build_legitimate_dataset(legitimate_urls)
df = pd.concat([phishing_df, legitimate_df], ignore_index=True)
df = df.sample(frac=1, random_state=42).reset_index(drop=True)
print(f"\nDataset built:")
print(f" Total: {len(df)}")
print(f" Phishing: {len(df[df['label'] == 1])}")
print(f" Legitimate: {len(df[df['label'] == 0])}")
return df
SAMPLE_LEGITIMATE_URLS = [
"https://www.amazon.com", "https://www.ebay.com", "https://www.paypal.com",
"https://www.apple.com", "https://www.nike.com", "https://www.adidas.com",
"https://www.zara.com", "https://www.walmart.com", "https://www.etsy.com",
"https://www.shopify.com", "https://www.dhl.com", "https://www.fedex.com",
"https://www.ups.com", "https://www.netflix.com", "https://www.spotify.com",
"https://www.steampowered.com", "https://www.playstation.com", "https://www.roblox.com",
"https://www.bilka.dk", "https://www.matas.dk", "https://www.elgiganten.dk",
"https://www.proshop.dk", "https://www.komplett.dk", "https://www.coolshop.dk",
]