File size: 5,639 Bytes
8fd4eb2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
import os
import requests
from bs4 import BeautifulSoup
import json
import time
import random
# --- KONFIGURACJA ---
OUTPUT_DIR = "scan-candidates"
LIMIT = 20 # Liczba zdjęć na kategorię
# Agresywne zapytania nakierowane na wypełnione dokumenty
CATEGORIES = {
# --- FINANCIAL ---
"pit11": "PIT-11 przykład wypełnienia skan",
"pit37": "PIT-37 wypełniony formularz dane",
"pit36": "PIT-36 uzupełniony przykład",
"pit36L": "PIT-36L wypełniony skan",
"pit28": "PIT-28 wypełniona deklaracja",
"pit38": "PIT-38 przykład uzupełniony",
"pit39": "PIT-39 przykładowe dane",
"pit5": "PIT-5 wypełniony formularz skan",
"pit8C": "PIT-8C wypełniony dane",
"vat7": "VAT-7 deklaracja wypełniona przykład",
"cit8": "CIT-8 uzupełniony formularz",
"pcc3": "PCC-3 wypełniony przykład",
"invoice": "faktura vat wypełniona dane skan",
"proformaInvoice": "faktura proforma uzupełniona dane",
"receipt": "paragon fiskalny zdjęcie realne",
"utilityBill": "rachunek za prąd uzupełniony dane",
"bankStatement": "wyciąg bankowy realny przykład",
"loanAgreement": "umowa pożyczki wypełniona dane",
"insurancePolicy": "polisa ubezpieczeniowa wypełniona skan",
# --- LEGAL ---
"notarialDeed": "akt notarialny skan z danymi",
"courtJudgment": "wyrok sądu wypełniony uzupełniony",
"powerOfAttorney": "pełnomocnictwo uzupełnione dane",
"employmentContract": "umowa o pracę wypełniona dane",
"mandateContract": "umowa zlecenie uzupełniona przykładowa",
"taskContract": "umowa o dzieło wypełniona skan",
"b2bContract": "umowa B2B wypełniona dane",
"nonCompeteAgreement": "zakaz konkurencji uzupełniony przykład",
"lawsuit": "pozew cywilny wypełniony skan",
# --- PERSONAL ---
"idCard": "dowód osobisty specimen dane polska",
"passport": "paszport polski specimen dane",
"birthCertificate": "odpis aktu urodzenia wypełniony",
"marriageCertificate": "akt małżeństwa uzupełniony dane",
"deathCertificate": "akt zgonu wypełniony przykład",
"peselConfirmation": "potwierdzenie nadania PESEL wypełnione",
"drivingLicense": "prawo jazdy specimen polska",
"schoolCertificate": "świadectwo szkolne wypełnione dane",
"universityDiploma": "dyplom ukończenia studiów wypełniony",
"professionalCertificate": "certyfikat zawodowy uzupełniony",
"cv": "życiorys CV wypełniony dane",
# --- HEALTH ---
"sickLeave": "zwolnienie lekarskie L4 wypełnione skan",
"prescription": "recepta lekarska wypisana dane",
"medicalResults": "wyniki badań laboratoryjnych dane pacjenta",
"referral": "skierowanie do lekarza uzupełnione",
"medicalHistory": "karta pacjenta wypełniona skan",
"vaccinationCard": "karta szczepień uzupełniona",
"sanitaryBooklet": "książeczka sanepidowska wypełniona",
# --- PROPERTY ---
"propertyDeed": "akt własności nieruchomości uzupełniony",
"landRegistry": "księga wieczysta odpis przykład",
"rentalAgreement": "umowa najmu mieszkania wypełniona dane",
"registrationCertificate": "dowód rejestracyjny pojazdu uzupełniony",
"vehicleHistory": "raport historii pojazdu dane",
"landMap": "mapa geodezyjna skan",
"technicalInspection": "zaświadczenie o badaniu technicznym wypełnione",
# --- OTHER ---
"application": "wniosek urzędowy wypełniony skan",
"certificate": "zaświadczenie o niekaralności uzupełnione",
"authorization": "upoważnienie wypełnione dane",
}
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
def download_images(query, folder_name):
print(f"\n🚀 POBIERANIE WYPEŁNIONYCH: {folder_name.upper()}")
search_url = f"https://www.bing.com/images/search?q={query.replace(' ', '+')}&form=HDRSC2"
try:
response = requests.get(search_url, headers=HEADERS, timeout=15)
soup = BeautifulSoup(response.text, 'html.parser')
target_path = os.path.join(OUTPUT_DIR, folder_name)
os.makedirs(target_path, exist_ok=True)
links = []
for a in soup.find_all("a", {"class": "iusc"}):
if "m" in a.attrs:
m = json.loads(a["m"])
links.append(m["murl"])
print(f" 🔍 Linki: {len(links)}")
downloaded = 0
for url in links:
if downloaded >= LIMIT: break
try:
if any(ext in url.lower() for ext in [".pdf", ".html", ".php"]): continue
ext = ".jpg" if ".png" not in url.lower() else ".png"
res = requests.get(url, headers=HEADERS, timeout=7)
if res.status_code == 200 and "text/html" not in res.headers.get('Content-Type', ''):
file_name = f"{folder_name}_{downloaded}{ext}"
with open(os.path.join(target_path, file_name), "wb") as f:
f.write(res.content)
print(f" ✅ [{downloaded+1}/{LIMIT}] {file_name}")
downloaded += 1
if downloaded % 5 == 0: time.sleep(1)
except: continue
except Exception as e:
print(f" 🚨 Błąd: {e}")
if __name__ == "__main__":
os.makedirs(OUTPUT_DIR, exist_ok=True)
for i, (folder, query) in enumerate(CATEGORIES.items()):
download_images(query, folder)
wait = random.uniform(3, 6)
print(f"😴 Przerwa {wait:.1f}s... ({i+1}/{len(CATEGORIES)})")
time.sleep(wait) |