Created
June 2, 2025 06:00
-
-
Save hid0/a4cd01316a1ddc55dc22a9b7e8b80a29 to your computer and use it in GitHub Desktop.
script scraping data e ijazah
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import PyPDF2 | |
| import pandas as pd | |
| import re | |
| # Ganti dengan nama file PDF Anda jika berbeda | |
| pdf_file_path = 'ijazah_SMKW9.pdf' | |
| extracted_data = [] | |
| try: | |
| with open(pdf_file_path, 'rb') as file: | |
| reader = PyPDF2.PdfReader(file) | |
| num_pages = len(reader.pages) | |
| print(f"Mulai mengekstrak data dari {num_pages} halaman...") | |
| for i in range(num_pages): | |
| page = reader.pages[i] | |
| text = page.extract_text() | |
| no_ijazah = None | |
| nama_siswa = None | |
| ttl = None | |
| nisn = None | |
| bidang_program_kompetensi_keahlian = None # Variabel tunggal untuk menampung salah satu dari ketiganya | |
| # Regex untuk Nomor Ijazah | |
| ijazah_match = re.search(r'No\.\s*Ijazah:\s*(\d{15})', text, re.IGNORECASE) | |
| if ijazah_match: | |
| no_ijazah = ijazah_match.group(1).strip() | |
| else: | |
| ijazah_match_alt = re.search(r'No\.\s*Ijazah:\s*(\d+\s*\d+)', text, re.IGNORECASE) | |
| if ijazah_match_alt: | |
| no_ijazah = ijazah_match_alt.group(1).replace(" ", "").strip() | |
| # Regex untuk Nama Siswa | |
| nama_match = re.search(r'Dengan ini menyatakan bahwa:\s*\n\s*(.*?)\n', text, re.IGNORECASE | re.DOTALL) | |
| if nama_match: | |
| nama_siswa = nama_match.group(1).strip() | |
| if "tempat, tanggal lahir" in nama_siswa: | |
| nama_siswa = nama_siswa.split("tempat, tanggal lahir")[0].strip() | |
| if "Nomor Induk Siswa Nasional" in nama_siswa: | |
| nama_siswa = nama_siswa.split("Nomor Induk Siswa Nasional")[0].strip() | |
| else: | |
| nama_match_alt = re.search(r'(?<=Yang bertanda tangan di bawah ini menyatakan bahwa:\s*\n)(.*?)(?=\nNomor Induk Siswa Nasional)', text, re.IGNORECASE | re.DOTALL) | |
| if nama_match_alt: | |
| nama_siswa = nama_match_alt.group(1).strip() | |
| # Regex untuk Tempat, Tanggal Lahir | |
| ttl_match = re.search(r'tempat,\s*tanggal\s*lahir:\s*(.*?)\n', text, re.IGNORECASE) | |
| if ttl_match: | |
| ttl = ttl_match.group(1).strip() | |
| # Regex untuk Nomor Induk Siswa Nasional (NISN) | |
| nisn_match = re.search(r'Nomor Induk Siswa Nasional:\s*(\d{9,10})', text, re.IGNORECASE) | |
| if nisn_match: | |
| nisn = nisn_match.group(1).strip() | |
| # Regex untuk Kompetensi Keahlian, Konsentrasi Keahlian, Program Keahlian, atau Bidang Keahlian | |
| # Prioritaskan Kompetensi Keahlian terlebih dahulu | |
| kompetensi_keahlian_match = re.search(r'Kompetensi Keahlian\s*:\s*(.*?)\n', text, re.IGNORECASE) | |
| if kompetensi_keahlian_match: | |
| bidang_program_kompetensi_keahlian = kompetensi_keahlian_match.group(1).strip() | |
| else: | |
| konsentrasi_keahlian_match = re.search(r'Konsentrasi Keahlian\s*:\s*(.*?)\n', text, re.IGNORECASE) | |
| if konsentrasi_keahlian_match: | |
| bidang_program_kompetensi_keahlian = konsentrasi_keahlian_match.group(1).strip() | |
| else: | |
| program_keahlian_match = re.search(r'Program Keahlian\s*:\s*(.*?)\n', text, re.IGNORECASE) | |
| if program_keahlian_match: | |
| bidang_program_kompetensi_keahlian = program_keahlian_match.group(1).strip() | |
| else: | |
| bidang_keahlian_match = re.search(r'Bidang Keahlian\s*:\s*(.*?)\n', text, re.IGNORECASE) | |
| if bidang_keahlian_match: | |
| bidang_program_kompetensi_keahlian = bidang_keahlian_match.group(1).strip() | |
| # Hanya tambahkan data jika setidaknya Nomor Ijazah ditemukan | |
| if no_ijazah or nama_siswa or nisn or ttl or bidang_program_kompetensi_keahlian: | |
| extracted_data.append({ | |
| 'Halaman': i + 1, | |
| 'No. Ijazah': no_ijazah, | |
| 'Nama Siswa': nama_siswa, | |
| 'Tempat, tanggal lahir': ttl, | |
| 'Nomor Induk Siswa Nasional': nisn, | |
| 'Bidang/Program/Kompetensi Keahlian': bidang_program_kompetensi_keahlian # Kolom baru | |
| }) | |
| print(f"Total {len(extracted_data)} data berhasil diekstraksi.") | |
| # Buat DataFrame dari data yang diekstrak | |
| df = pd.DataFrame(extracted_data) | |
| # Simpan DataFrame ke file Excel | |
| output_excel_file = 'data_ijazah_all.xlsx' | |
| df.to_excel(output_excel_file, index=False) | |
| print(f"Data lengkap berhasil disimpan ke '{output_excel_file}'") | |
| except FileNotFoundError: | |
| print(f"Error: File '{pdf_file_path}' tidak ditemukan. Pastikan nama file dan lokasi sudah benar.") | |
| except Exception as e: | |
| print(f"Terjadi kesalahan: {e}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment