paperstack_document_data_retrieval / bing-scrapper-all.py
pemix09's picture
Add files using upload-large-folder tool
8fd4eb2 verified
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)