{"id":21404,"date":"2026-10-04T00:19:45","date_gmt":"2026-10-03T17:19:45","guid":{"rendered":"https:\/\/man2kulonprogo.sch.id\/m2kp\/?p=21404"},"modified":"2026-10-04T00:56:11","modified_gmt":"2026-10-03T17:56:11","slug":"pengumpulan-data-otomatis-web-scraping","status":"publish","type":"post","link":"https:\/\/man2kulonprogo.sch.id\/m2kp\/2026\/10\/04\/pengumpulan-data-otomatis-web-scraping\/","title":{"rendered":"Pengumpulan Data Otomatis &#8211; Web Scraping"},"content":{"rendered":"<h2 style=\"color: #0f766e; border-bottom: 3px solid #0f766e; padding-bottom: 8px;\">Informatika Kelas X \u2014 Bab 6: Analisis Data<\/h2>\n<h3 style=\"color: #334155; font-weight: normal; margin-top: -6px;\">Bagian G: Pengumpulan Data Otomatis \u2014 Web Scraping<\/h3>\n<p><strong>Pengampu :<\/strong> Zuli Irawanto, ST<\/p>\n<hr \/>\n<h3 style=\"background: #0f766e; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83c\udfaf Tujuan Pembelajaran<\/h3>\n<p>Setelah mempelajari materi ini, siswa diharapkan mampu:<\/p>\n<ol>\n<li>Menjelaskan pengertian web scraping dan manfaatnya untuk mengumpulkan data.<\/li>\n<li>Menerapkan etika dan aturan dasar dalam mengambil data dari situs web.<\/li>\n<li>Membaca struktur sederhana HTML (tag, atribut, dan <em>class<\/em>).<\/li>\n<li>Mengambil data dari halaman web memakai pustaka <code>requests<\/code> dan BeautifulSoup, lalu menyimpannya dalam DataFrame.<\/li>\n<\/ol>\n<hr \/>\n<h3 style=\"background: #0ea5e9; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">Apa Itu Web Scraping?<\/h3>\n<p>Di Bagian A kita tahu bahwa tahap pertama analisis data adalah <strong>koleksi data<\/strong>. Bagaimana kalau datanya ada di sebuah situs web, misalnya daftar harga 1.000 buku? Menyalinnya satu per satu dengan tangan sangat melelahkan.<\/p>\n<p><strong>Web scraping<\/strong> adalah teknik mengambil data dari halaman web <strong>secara otomatis<\/strong> memakai program. Program kita bertugas &#8220;membaca&#8221; halaman web seperti manusia, lalu mencatat bagian yang kita butuhkan ke dalam tabel.<\/p>\n<div style=\"background: #f8fafc; border: 2px solid #94a3b8; border-radius: 12px; padding: 10px 12px; margin: 14px 0;\">\n<div style=\"font-size: 13px; color: #475569; margin-bottom: 6px;\">Alur kerja web scraping (dibaca dari atas ke bawah)<\/div>\n<div style=\"background: #e0f2fe; border: 2px solid #0ea5e9; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">1\ufe0f\u20e3 <strong>Minta halaman<\/strong> \u279c <code>requests<\/code> membuka alamat web<\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #fffbeb; border: 2px solid #f59e0b; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">2\ufe0f\u20e3 <strong>Terima HTML<\/strong> \u279c kode mentah halaman web<\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #dcfce7; border: 2px solid #22c55e; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">3\ufe0f\u20e3 <strong>Cari bagian yang dibutuhkan<\/strong> \u279c BeautifulSoup<\/div>\n<div style=\"text-align: center; font-size: 20px; color: #334155;\">\u2193<\/div>\n<div style=\"background: #fae8ff; border: 2px solid #c026d3; border-radius: 10px; padding: 8px 12px; margin: 6px 0;\">4\ufe0f\u20e3 <strong>Simpan ke tabel<\/strong> \u279c pandas DataFrame<\/div>\n<\/div>\n<div style=\"background: #fff1f2; border-left: 5px solid #e11d48; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\">\n<p><strong>\u2696\ufe0f Etika dan aturan scraping, wajib dipahami!<\/strong><\/p>\n<ul style=\"margin-bottom: 0;\">\n<li>Ambil <strong>data publik<\/strong> saja. Jangan mengambil data pribadi orang lain atau halaman yang memerlukan login tanpa izin.<\/li>\n<li>Periksa <strong>aturan situs<\/strong> (syarat penggunaan dan berkas <code>robots.txt<\/code>). Ada situs yang melarang scraping.<\/li>\n<li><strong>Jangan membebani server<\/strong>: jangan mengirim permintaan terlalu sering atau terlalu banyak.<\/li>\n<li>Hargai <strong>hak cipta<\/strong>. Sebutkan sumber data bila hasilnya dipakai atau dibagikan.<\/li>\n<li>Di materi ini kita berlatih di <strong>books.toscrape.com<\/strong>, situs khusus yang memang dibuat untuk latihan scraping.<\/li>\n<\/ul>\n<\/div>\n<hr \/>\n<h3 style=\"background: #6366f1; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">Cara Belajar Bagian Ini<\/h3>\n<p>Bagian ini berisi <strong>5 Tugas Praktik<\/strong>, yaitu <strong>Praktik 29 sampai 33<\/strong> (melanjutkan Bagian F). Polanya masih sama: \ud83e\udd14 <strong>Tebak dulu<\/strong> \u2192 \u2328\ufe0f <strong>Ketik &amp; jalankan<\/strong> \u2192 \u2705 <strong>Cocokkan<\/strong> \u2192 \ud83d\udca1 <strong>Pahami<\/strong> \u2192 \ud83c\udfc1 <strong>Tantangan mini<\/strong>.<\/p>\n<div style=\"background: #fffbeb; border-left: 5px solid #f59e0b; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>Persiapan:<\/strong> buat notebook baru bernama <strong>Praktik_Bab6G_NamaKamu<\/strong>. Praktik 30 sampai 33 <strong>berlanjut dalam satu notebook<\/strong>, jadi jalankan sel dari atas ke bawah. Pustaka <code>requests<\/code> dan BeautifulSoup sudah terpasang di Colab. Praktik 31 sampai 33 membutuhkan <strong>koneksi internet<\/strong>.<\/div>\n<hr \/>\n<h3 style=\"background: #0ea5e9; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 29: Mengintip HTML Sebuah Halaman Web<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Saat kamu melihat judul sebuah buku di halaman web, menurutmu di bagian mana dalam &#8220;kode&#8221; halaman itu judul tersebut disimpan?<\/div>\n<p><strong>\ud83d\uddb1\ufe0f Lakukan langkah ini di browser (laptop\/komputer):<\/strong><\/p>\n<ol>\n<li>Buka <strong>books.toscrape.com<\/strong>.<\/li>\n<li>Klik kanan pada judul salah satu buku, lalu pilih <strong>Inspect<\/strong> (atau tekan <strong>F12<\/strong>).<\/li>\n<li>Perhatikan baris yang ter-<em>highlight<\/em> di panel kode. Itulah <strong>HTML<\/strong> halaman tersebut.<\/li>\n<\/ol>\n<p><strong>\u2705 Yang akan kamu temukan (disederhanakan):<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">&lt;article class=\"product_pod\"&gt;\r\n  &lt;h3&gt;&lt;a href=\"...\" title=\"A Light in the Attic\"&gt;A Light in the ...&lt;\/a&gt;&lt;\/h3&gt;\r\n  &lt;p class=\"price_color\"&gt;51.77&lt;\/p&gt;\r\n&lt;\/article&gt;<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> HTML tersusun dari <strong>tag<\/strong> yang diapit tanda <code>&lt; &gt;<\/code>. Tiap tag biasanya punya pembuka dan penutup (<code>&lt;p&gt; ... &lt;\/p&gt;<\/code>). Perhatikan bahwa judul lengkap buku tersimpan di <strong>atribut<\/strong> <code>title<\/code> pada tag <code>&lt;a&gt;<\/code>, sedangkan teks yang tampil dipotong. Untuk scraping, kita perlu tahu <strong>tag, atribut, dan class<\/strong> tempat data berada. <em>(Catatan: pada halaman aslinya, angka harga didahului satu simbol mata uang asing. Abaikan saja, di praktik berikutnya kita hanya mengambil angkanya.)<\/em><\/p>\n<div style=\"overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse; margin: 16px 0;\">\n<thead>\n<tr>\n<th style=\"padding: 10px; border: 1px solid #0284c7; text-align: left; background: #bae6fd !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Bagian HTML<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #0284c7; text-align: left; background: #bae6fd !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Artinya<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #0284c7; text-align: left; background: #bae6fd !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Data yang kita ambil<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #f0f9ff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><code>&lt;article class=\"product_pod\"&gt;<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Satu kotak buku (kelas <code>product_pod<\/code>)<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Wadah satu buku<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><code>&lt;h3&gt;&lt;a title=\"...\"&gt;<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Judul; isi lengkapnya ada di atribut <code>title<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Judul buku<\/td>\n<\/tr>\n<tr style=\"background: #f0f9ff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\"><code>&lt;p class=\"price_color\"&gt;<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Paragraf dengan class <code>price_color<\/code><\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Harga buku<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Inspect <strong>harga<\/strong> sebuah buku. Tag dan class apa yang dipakai? Cocokkan dengan tabel di atas.<\/div>\n<hr \/>\n<h3 style=\"background: #6366f1; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 30: Membaca HTML dengan BeautifulSoup<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Jika kita punya potongan HTML berisi daftar nilai, bagaimana Python mengambil tulisan di dalam setiap tag <code>&lt;li&gt;<\/code>?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">from bs4 import BeautifulSoup\r\n\r\nhtml = \"\"\"\r\n&lt;html&gt;&lt;body&gt;\r\n  &lt;h1&gt;Daftar Nilai&lt;\/h1&gt;\r\n  &lt;ul&gt;\r\n    &lt;li class=\"siswa\"&gt;Budi: 87&lt;\/li&gt;\r\n    &lt;li class=\"siswa\"&gt;Sari: 90&lt;\/li&gt;\r\n    &lt;li class=\"siswa\"&gt;Andi: 75&lt;\/li&gt;\r\n  &lt;\/ul&gt;\r\n&lt;\/body&gt;&lt;\/html&gt;\r\n\"\"\"\r\n\r\nsoup = BeautifulSoup(html, \"html.parser\")\r\nprint(soup.h1.text)\r\n\r\nfor item in soup.find_all(\"li\"):\r\n    print(item.text)<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">Daftar Nilai\r\nBudi: 87\r\nSari: 90\r\nAndi: 75<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> Teks yang diapit tiga tanda kutip <code>\"\"\" ... \"\"\"<\/code> boleh terdiri dari banyak baris. <code>BeautifulSoup(html, \"html.parser\")<\/code> mengubah HTML menjadi objek yang mudah ditelusuri. <code>soup.h1.text<\/code> mengambil tulisan di dalam tag <code>&lt;h1&gt;<\/code>, sedangkan <code>find_all(\"li\")<\/code> mengumpulkan <strong>semua<\/strong> tag <code>&lt;li&gt;<\/code> dalam bentuk list, yang bisa kita proses dengan <code>for<\/code> (Bagian E). Perhatikan: di Python kodenya ditulis dengan tanda kurung siku\/kurung biasa, sedangkan tanda <code>&lt; &gt;<\/code> hanya ada di dalam teks HTML.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Tambahkan satu baris <code>&lt;li class=\"siswa\"&gt;Dedi: 82&lt;\/li&gt;<\/code> ke dalam HTML, lalu jalankan lagi. Apa yang berubah?<\/div>\n<hr \/>\n<h3 style=\"background: #22c55e; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 31: Mengambil Halaman Web dengan requests<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Menurutmu, apa yang dikirim Python ke sebuah situs web agar situs itu mau &#8220;menyerahkan&#8221; halamannya?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">import requests\r\nfrom bs4 import BeautifulSoup\r\n\r\nurl = \"https:\/\/books.toscrape.com\/\"\r\nr = requests.get(url)\r\n\r\nprint(r.status_code)\r\n\r\nsoup = BeautifulSoup(r.content, \"html.parser\")\r\nprint(soup.title.text.strip())<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">200\r\nAll products | Books to Scrape - Sandbox<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> <code>requests.get(url)<\/code> mengirim permintaan ke situs, mirip membuka alamat di browser. <code>r.status_code<\/code> adalah kode jawaban dari situs: <strong>200<\/strong> berarti berhasil, <strong>404<\/strong> berarti halaman tidak ditemukan. Isi halaman (HTML) disimpan di <code>r.content<\/code>, lalu diubah menjadi <code>soup<\/code> seperti di Praktik 30. <code>soup.title.text<\/code> mengambil judul halaman, dan <code>.strip()<\/code> membuang spasi atau baris kosong di pinggir. <em>Catatan:<\/em> hasil ini diambil dari situs langsung, jadi tampilannya bisa sedikit berbeda bila situs berubah.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Ubah <code>url<\/code> menjadi <code>\"https:\/\/books.toscrape.com\/halaman-ngawur\"<\/code>. Apa <code>status_code<\/code>-nya?<\/div>\n<hr \/>\n<h3 style=\"background: #f59e0b; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 32: Mengambil Judul dan Harga Buku<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Di halaman itu ada banyak buku. Bagaimana mengambil judul dan harga dari tiga buku pertama?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">buku = soup.find_all(\"article\", class_=\"product_pod\")\r\nprint(\"Jumlah buku:\", len(buku))\r\n\r\nfor b in buku[:3]:\r\n    judul = b.h3.a[\"title\"]\r\n    teks = b.find(\"p\", class_=\"price_color\").text\r\n    harga = teks[1:]\r\n    print(f\"{judul} - {harga}\")<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">Jumlah buku: 20\r\nA Light in the Attic - 51.77\r\nTipping the Velvet - 53.74\r\nSoumission - 50.10<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> <code>find_all(\"article\", class_=\"product_pod\")<\/code> mengumpulkan semua kotak buku (sesuai hasil Inspect di Praktik 29) ke dalam list <code>buku<\/code>. Untuk tiap buku, judul diambil dari <strong>atribut<\/strong> <code>title<\/code> (ditulis <code>b.h3.a[\"title\"]<\/code>), dan harga dari tag <code>p<\/code> ber-class <code>price_color<\/code>. Teks harga diawali satu simbol mata uang yang tidak kita perlukan, jadi kita ambil mulai dari <strong>karakter kedua<\/strong> dengan <code>teks[1:]<\/code> (slicing, sama seperti pada list di Bagian D). Potongan <code>buku[:3]<\/code> adalah <em>slicing<\/em> dari Bagian D. Praktik ini memakai <code>soup<\/code> dari Praktik 31. Harga dan judul bisa berbeda bila situs memperbarui isinya.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Ganti <code>buku[:3]<\/code> menjadi <code>buku[:5]<\/code> atau <code>buku<\/code> agar semua 20 buku tampil.<\/div>\n<hr \/>\n<h3 style=\"background: #e11d48; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">\ud83e\uddea Tugas Praktik 33: Menyimpan Hasil Scraping ke DataFrame<\/h3>\n<div style=\"background: #f0f9ff; border-left: 5px solid #0ea5e9; border-radius: 8px; padding: 12px 16px; margin: 14px 0;\"><strong>\ud83e\udd14 Tebak dulu!<\/strong> Kalau judul dan harga seluruh buku sudah dikumpulkan, bagaimana membuatnya menjadi tabel yang siap dianalisis?<\/div>\n<p><strong>\u2328\ufe0f Ketik di sel kode, lalu jalankan:<\/strong><\/p>\n<pre style=\"background: #1e293b !important; color: #e2e8f0 !important; padding: 12px 16px; border-radius: 8px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">import pandas as pd\r\n\r\njudul = []\r\nharga = []\r\n\r\nfor b in buku:\r\n    judul.append(b.h3.a[\"title\"])\r\n    teks = b.find(\"p\", class_=\"price_color\").text\r\n    harga.append(float(teks[1:]))\r\n\r\ndf = pd.DataFrame({\"Judul\": judul, \"Harga\": harga})\r\n\r\nprint(df.shape)\r\nprint(df.head(3))<\/pre>\n<p><strong>\u2705 Hasilnya:<\/strong><\/p>\n<pre style=\"background: #f1f5f9 !important; color: #0f172a !important; padding: 12px 16px; border-left: 4px solid #94a3b8; border-radius: 4px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; font-size: 15px;\">(20, 2)\r\n                    Judul  Harga\r\n0    A Light in the Attic  51.77\r\n1      Tipping the Velvet  53.74\r\n2              Soumission  50.10<\/pre>\n<p><strong>\ud83d\udca1 Penjelasan:<\/strong> Kita menyiapkan dua list kosong, lalu mengisinya lewat perulangan dengan <code>append()<\/code>. Harga awalnya berupa <strong>teks<\/strong> yang diawali satu simbol. Simbol itu dibuang dengan <code>teks[1:]<\/code>, lalu sisanya diubah menjadi angka desimal dengan <code>float()<\/code> (ingat tipe data di Bagian C!). Setelah itu data siap diolah dengan pandas, misalnya <code>df[\"Harga\"].mean()<\/code> atau <code>df.sort_values(\"Harga\")<\/code> seperti di Bagian F. Selamat! \ud83c\udf89 Kamu telah menyelesaikan alur <strong>koleksi data otomatis<\/strong> dari awal sampai tabel.<\/p>\n<div style=\"background: #fffbeb; border: 2px dashed #f59e0b; border-radius: 10px; padding: 10px 16px; margin: 14px 0;\"><strong>\ud83c\udfc1 Tantangan mini:<\/strong> Tampilkan 3 buku <strong>termurah<\/strong> dengan <code>df.sort_values(\"Harga\").head(3)<\/code>.<\/div>\n<hr \/>\n<h3 style=\"background: #7c3aed; color: #ffffff; padding: 10px 16px; border-radius: 8px;\">Rangkuman<\/h3>\n<ul>\n<li><strong>Web scraping<\/strong> adalah teknik mengambil data dari halaman web secara otomatis, dan menjadi tahap <em>koleksi data<\/em> dalam analisis data.<\/li>\n<li>Lakukan scraping dengan etis: ambil data publik, patuhi aturan situs (<code>robots.txt<\/code>), jangan membebani server, dan sebutkan sumber.<\/li>\n<li>HTML tersusun dari <strong>tag<\/strong>, <strong>atribut<\/strong>, dan <strong>class<\/strong>. Gunakan <em>Inspect<\/em> di browser untuk menemukan lokasi data.<\/li>\n<li><code>requests.get()<\/code> mengambil halaman, dan <code>status_code<\/code> 200 berarti berhasil.<\/li>\n<li>BeautifulSoup memudahkan pencarian data: <code>find_all()<\/code>, <code>.text<\/code>, dan atribut seperti <code>[\"title\"]<\/code>.<\/li>\n<li>Hasil scraping disimpan ke list, lalu dijadikan <strong>DataFrame<\/strong> untuk dianalisis dengan pandas.<\/li>\n<\/ul>\n<hr \/>\n<div style=\"background: #eef2ff; border: 2px dashed #6366f1; border-radius: 12px; padding: 14px 20px; margin: 16px 0;\">\n<h4 style=\"color: #4338ca; margin-top: 0;\">\ud83c\udf31 Pengayaan (Opsional)<\/h4>\n<p style=\"color: #312e81;\">Untuk mengecek apakah sebuah situs mengizinkan scraping, tambahkan <code>\/robots.txt<\/code> di belakang alamat situs tersebut di browser, misalnya <code>https:\/\/books.toscrape.com\/robots.txt<\/code>. Berkas itu berisi aturan bagian mana yang boleh dan tidak boleh diambil oleh program.<\/p>\n<p style=\"margin-bottom: 0; color: #312e81;\"><em>Situs asli seperti toko online atau media sering memiliki aturan ketat, bahkan menyediakan <strong>API<\/strong> resmi untuk mengambil data dengan cara yang diizinkan. Di Bagian H kita akan belajar membersihkan dan merapikan data hasil pengumpulan.<\/em><\/p>\n<\/div>\n<hr \/>\n<div style=\"background: #fdf2f8; border: 2px solid #ec4899; border-radius: 12px; padding: 16px 20px; margin: 16px 0;\">\n<h3 style=\"color: #db2777; margin-top: 0;\">\ud83d\udc97 Nilai Panca Cinta: Cinta Diri dan Sesama<\/h3>\n<p style=\"color: #831843;\">Kemampuan scraping adalah kekuatan, dan kekuatan perlu disertai <strong>akhlak<\/strong>. Menghormati aturan situs, tidak mengambil data pribadi orang lain, tidak membebani server, dan menyebut sumber adalah bentuk <strong>menghargai hak sesama<\/strong>. Dengan bersikap jujur dan bertanggung jawab di dunia digital, kita menjaga diri sendiri dari masalah, sekaligus menjaga kenyamanan orang lain. Itulah wujud <strong>cinta diri dan sesama<\/strong>.<\/p>\n<p style=\"color: #831843;\"><em>Refleksi: Apa yang kamu rasakan bila data pribadimu (foto, nomor HP) diambil dan disebarkan orang lain tanpa izin? Apa yang bisa kamu lakukan agar tidak melakukannya pada orang lain?<\/em><\/p>\n<\/div>\n<hr \/>\n<div style=\"background: #f0fdfa; border: 2px solid #0f766e; border-radius: 12px; padding: 16px 20px; margin: 16px 0;\">\n<h3 style=\"color: #0f766e; margin-top: 0;\">\ud83d\udcdd Tugas Siswa<\/h3>\n<p><strong>Tugas Mandiri: Analisis Harga Buku dari Hasil Scraping<\/strong><\/p>\n<p>Setelah menyelesaikan Praktik 29\u201333, buat <strong>satu notebook baru<\/strong> bernama <strong>Tugas_Scraping_NamaKamu<\/strong>, lalu kerjakan di situs <strong>books.toscrape.com<\/strong>:<\/p>\n<ol>\n<li>Ambil <strong>judul dan harga<\/strong> seluruh buku di halaman pertama, lalu simpan dalam DataFrame (ubah harga menjadi angka).<\/li>\n<li>Tampilkan <strong>jumlah buku<\/strong>, <strong>harga rata-rata<\/strong>, harga <strong>termurah<\/strong>, dan harga <strong>termahal<\/strong>.<\/li>\n<li>Tampilkan buku yang harganya <strong>di bawah 20<\/strong> (petunjuk: filter DataFrame seperti Bagian F).<\/li>\n<li>Tuliskan di sel teks <strong>sumber data<\/strong> dan <strong>satu aturan etika scraping<\/strong> yang kamu patuhi.<\/li>\n<\/ol>\n<div style=\"overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse; margin: 16px 0;\">\n<thead>\n<tr>\n<th style=\"padding: 10px; border: 1px solid #0f766e; text-align: left; background: #99f6e4 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Pertanyaan<\/span><\/th>\n<th style=\"padding: 10px; border: 1px solid #0f766e; text-align: left; background: #99f6e4 !important; color: #0f172a !important;\"><span style=\"color: #0f172a !important;\">Jawaban<\/span><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"background: #ffffff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Tautan (link) notebook<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Jumlah buku dan harga rata-rata<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr style=\"background: #ffffff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Harga termurah dan termahal<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Jumlah buku dengan harga di bawah 20<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<tr style=\"background: #ffffff;\">\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">Kendala yang dialami &amp; cara mengatasinya<\/td>\n<td style=\"padding: 10px; border: 1px solid #cbd5e1;\">\u2026<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div style=\"background: #fdf2f8; border-left: 4px solid #db2777; border-radius: 8px; padding: 12px 16px; margin: 16px 0;\"><strong style=\"color: #db2777;\">\ud83d\udc97 Soal Tambahan (Nilai Panca Cinta \u2014 Cinta Diri dan Sesama):<\/strong><br \/>\nSebutkan dua contoh data yang <strong>boleh<\/strong> dan dua contoh data yang <strong>tidak boleh<\/strong> diambil dengan scraping. Jelaskan alasanmu.<em style=\"color: #831843;\">Jawaban: \u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026\u2026<\/em><\/div>\n<p><em>Kerjakan di Colab, lalu kumpulkan tautan notebook melalui link\/aplikasi yang diinformasikan guru (sesuai kondisi dan kesepakatan dengan guru pengampu). Jika tidak memungkinkan memakai laptop, boleh dicatat dan difoto di buku tugas.<\/em><\/p>\n<\/div>\n<a href=\"https:\/\/man2kulonprogo.sch.id\/m2kp\/2023\/08\/28\/informatika-kelas-x-semester-gasal\/#bab6\" class=\"shortc-button medium purple  \">Informatika Kelas X<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Informatika Kelas X \u2014 Bab 6: Analisis Data Bagian G: Pengumpulan Data Otomatis \u2014 Web Scraping Pengampu : Zuli Irawanto, ST \ud83c\udfaf Tujuan Pembelajaran Setelah mempelajari materi ini, siswa diharapkan mampu: Menjelaskan pengertian web scraping dan manfaatnya untuk mengumpulkan data. Menerapkan etika dan aturan dasar dalam mengambil data dari situs web. Membaca struktur sederhana HTML &hellip;<\/p>\n","protected":false},"author":1,"featured_media":21405,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1128,1582],"tags":[],"class_list":["post-21404","post","type-post","status-publish","format-standard","has-post-thumbnail","","category-informatika","category-informatika-kelas-x"],"_links":{"self":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/posts\/21404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/comments?post=21404"}],"version-history":[{"count":0,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/posts\/21404\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/media\/21405"}],"wp:attachment":[{"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/media?parent=21404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/categories?post=21404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/man2kulonprogo.sch.id\/m2kp\/wp-json\/wp\/v2\/tags?post=21404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}