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)