DMBG #4 Responsi

TAHAPAN WEB CRAWLING BERITA DETIK.COM MENGGUNAKAN R

1. Instalasi dan memuat library yang diperlukan

# Pastikan Anda menginstal paket-paket ini jika belum ada
if (!require("rvest")) install.packages("rvest")
## Loading required package: rvest
if (!require("dplyr")) install.packages("dplyr")
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
if (!require("stringr")) install.packages("stringr")
## Loading required package: stringr
if (!require("lubridate")) install.packages("lubridate")
## Loading required package: lubridate
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
# Memuat library
library(rvest)     # Untuk web scraping
library(dplyr)     # Untuk manipulasi data
library(stringr)   # Untuk manipulasi string
library(lubridate) # Untuk manipulasi tanggal

2. Mendefinisikan URL artikel yang akan di-crawl

url <- "https://news.detik.com/internasional/d-7862500/drone-rusia-kembali-hantam-ibu-kota-ukraina-12-orang-luka"
url
## [1] "https://news.detik.com/internasional/d-7862500/drone-rusia-kembali-hantam-ibu-kota-ukraina-12-orang-luka"

3. Membaca konten HTML dari URL

# Ini adalah langkah pertama untuk mengakses konten web
halaman <- read_html(url)
halaman
## {html_document}
## <html lang="id-ID">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ...
## [2] <body>\n        <div class="sticky-share has-class">\n    <div class="sti ...
## [3] <script type="text/javascript" src="https://cdn.detik.net.id/assets/js/zo ...
## [4] <script type="text/javascript" src="https://cdn.detik.net.id/assets/js/li ...
## [5] <script type="text/javascript" src="https://cdn.detik.net.id/assets/js/if ...

4. Ekstraksi elemen-elemen berita

4.1 Mengekstrak judul artikel

judul <- halaman %>%
        html_element("h1.detail__title") %>%
        html_text() %>%
        str_trim()
judul
## [1] "Drone Rusia Kembali Hantam Ibu Kota Ukraina, 12 Orang Luka"

4.2 Mengekstrak waktu publikasi

waktu_publikasi <- halaman %>%
        html_element("div.detail__date") %>%
        html_text() %>%
        str_trim()
waktu_publikasi
## [1] "Kamis, 10 Apr 2025 13:45 WIB"

4.3 Mengekstrak nama penulis

penulis <- halaman %>%
        html_element(".detail__author") %>%
        html_text() %>%
        str_trim() %>%
        str_replace("^.*?-\\s*", "") # Menghapus prefix seperti "Jakarta -"
penulis
## [1] "detikNews"

4.4 Mengekstrak konten artikel

konten <- halaman %>%
        html_elements(".detail__body-text") %>%
        html_text() %>%
        paste(collapse = "\n\n") %>%
        str_trim()
konten
## [1] "Jakarta - Serangan drone-drone Rusia kembali menghantam ibu kota Ukraina, Kyiv, dan kota Mykolaiv di Ukraina selatan. Otoritas Ukraina mengatakan bahwa serangan tersebut melukai sedikitnya 12 orang.Dilansir Reuters dan Al-Arabiya, Kamis (10/4/2025), dua wanita terluka di Kyiv akibat serangan drone Rusia pada Rabu (9/4) malam waktu setempat itu. Drone-drone tersebut juga memicu kebakaran di fasilitas penyimpanan dan merusak bangunan tempat tinggal di Kyiv, kata administrasi militer kota Kyiv.Pihak berwenang mencatat 30 drone di wilayah udara di atas ibu kota, 16 di antaranya hancur dan sisanya meninggalkan wilayah udara atau \"hilang.\"\r\n@import url(\"https://cdnstatic.detik.com/live/_rmbassets/scrollpage/scrollpage.css\");\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  \r\n    googletag.cmd.push(function() { googletag.display('div-gpt-ad-1572507980488-0'); });\r\n  \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nSCROLL TO CONTINUE WITH CONTENT\r\n\r\n\r\n\r\nBaca juga: Trump Ancam Iran, Rusia Bilang Dunia Mulai Lelah!Serangan itu juga melukai 10 orang di kota Mykolaiv, kata gubernur wilayah tersebut, Vitalii Kim.Serangan drone Rusia itu juga merusak sembilan gedung apartemen, 30 garasi, dan sebuah gedung administrasi, tambah Kim.\r\n\r\nADVERTISEMENT\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n  \r\n (function(w,q){w[q]=w[q]||[];w[q].push([\"_mgc.load\"])})(window,\"_mgq\"); \r\n \r\n\r\n\r\n\r\nDalam serangan-serangannya, Rusia membantah menargetkan warga sipil, tetapi ribuan orang telah tewas dan terluka dalam invasinya ke Ukraina.Wilayah lainnya yang dihantam serangan drone Rusia adalah Kharkiv, yang berbatasan dengan Rusia. Seorang pejabat setempat melaporkan seorang pria berusia 65 tahun dan seorang wanita berusia 50 tahun mengalami luka-luka dalam serangan yang menghantam perusahaan sipil setempat.Rusia terus membombardir Ukraina, meskipun pemerintahan Presiden AS Donald Trump telah menggelar beberapa putaran perundingan dengan para pejabat Ukraina dan Rusia, dengan harapan dapat menghentikan pertempuran. Sejauh ini, upaya pemerintahan Trump belum membuahkan hasil yang nyata.Baca juga: Zelensky: Rusia Seret China ke Dalam Perang UkrainaLihat Video 'Drone Tempur Rusia Hantam Apartemen di Dnipro, 15 Terluka':[Gambas:Video 20detik]        \r\n\t\t\r\n        (ita/ita)\r\n        \r\n            \r\n                \t\t\t\tdrone rusia\t\t\t\trusia\t\t\t\tukraina            \r\n        \r\n\r\n        \r\n            \r\n    \r\n        \r\n            \r\n        \r\n            \r\n                Hoegeng Awards 2025\r\n            \r\n            \r\n                Baca kisah inspiratif kandidat polisi teladan di sini\r\n            \r\n        \r\n    \r\n    \r\n        Selengkapnya"

4.5 Mengekstrak tag atau kategori (jika ada)

kategori <- halaman %>%
        html_element(".nav__item--active") %>%
        html_text() %>%
        str_trim()
kategori
## [1] "Internasional"

4.6 Mengekstrak gambar utama (jika perlu)

url_gambar <- halaman %>%
        html_element(".detail__media-image img") %>%
        html_attr("src")
url_gambar
## [1] "https://akcdn.detik.net.id/community/media/visual/2024/04/23/perang-dengan-ukraina-masih-bergejolak-rusia-kembangkan-drone-militer-3_169.jpeg?w=700&q=90"

5. Menyimpan hasil ekstraksi ke dalam data frame

berita_df <- data.frame(
        judul = judul,
        waktu_publikasi = waktu_publikasi,
        penulis = penulis,
        kategori = kategori,
        url = url,
        url_gambar = url_gambar,
        konten = konten,
        stringsAsFactors = FALSE
)

6. Tampilkan hasil ekstraksi

print(berita_df)
##                                                        judul
## 1 Drone Rusia Kembali Hantam Ibu Kota Ukraina, 12 Orang Luka
##                waktu_publikasi   penulis      kategori
## 1 Kamis, 10 Apr 2025 13:45 WIB detikNews Internasional
##                                                                                                        url
## 1 https://news.detik.com/internasional/d-7862500/drone-rusia-kembali-hantam-ibu-kota-ukraina-12-orang-luka
##                                                                                                                                                 url_gambar
## 1 https://akcdn.detik.net.id/community/media/visual/2024/04/23/perang-dengan-ukraina-masih-bergejolak-rusia-kembangkan-drone-militer-3_169.jpeg?w=700&q=90
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   konten
## 1 Jakarta - Serangan drone-drone Rusia kembali menghantam ibu kota Ukraina, Kyiv, dan kota Mykolaiv di Ukraina selatan. Otoritas Ukraina mengatakan bahwa serangan tersebut melukai sedikitnya 12 orang.Dilansir Reuters dan Al-Arabiya, Kamis (10/4/2025), dua wanita terluka di Kyiv akibat serangan drone Rusia pada Rabu (9/4) malam waktu setempat itu. Drone-drone tersebut juga memicu kebakaran di fasilitas penyimpanan dan merusak bangunan tempat tinggal di Kyiv, kata administrasi militer kota Kyiv.Pihak berwenang mencatat 30 drone di wilayah udara di atas ibu kota, 16 di antaranya hancur dan sisanya meninggalkan wilayah udara atau "hilang."\r\n@import url("https://cdnstatic.detik.com/live/_rmbassets/scrollpage/scrollpage.css");\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  \r\n    googletag.cmd.push(function() { googletag.display('div-gpt-ad-1572507980488-0'); });\r\n  \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nSCROLL TO CONTINUE WITH CONTENT\r\n\r\n\r\n\r\nBaca juga: Trump Ancam Iran, Rusia Bilang Dunia Mulai Lelah!Serangan itu juga melukai 10 orang di kota Mykolaiv, kata gubernur wilayah tersebut, Vitalii Kim.Serangan drone Rusia itu juga merusak sembilan gedung apartemen, 30 garasi, dan sebuah gedung administrasi, tambah Kim.\r\n\r\nADVERTISEMENT\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n  \r\n (function(w,q){w[q]=w[q]||[];w[q].push(["_mgc.load"])})(window,"_mgq"); \r\n \r\n\r\n\r\n\r\nDalam serangan-serangannya, Rusia membantah menargetkan warga sipil, tetapi ribuan orang telah tewas dan terluka dalam invasinya ke Ukraina.Wilayah lainnya yang dihantam serangan drone Rusia adalah Kharkiv, yang berbatasan dengan Rusia. Seorang pejabat setempat melaporkan seorang pria berusia 65 tahun dan seorang wanita berusia 50 tahun mengalami luka-luka dalam serangan yang menghantam perusahaan sipil setempat.Rusia terus membombardir Ukraina, meskipun pemerintahan Presiden AS Donald Trump telah menggelar beberapa putaran perundingan dengan para pejabat Ukraina dan Rusia, dengan harapan dapat menghentikan pertempuran. Sejauh ini, upaya pemerintahan Trump belum membuahkan hasil yang nyata.Baca juga: Zelensky: Rusia Seret China ke Dalam Perang UkrainaLihat Video 'Drone Tempur Rusia Hantam Apartemen di Dnipro, 15 Terluka':[Gambas:Video 20detik]        \r\n\t\t\r\n        (ita/ita)\r\n        \r\n            \r\n                \t\t\t\tdrone rusia\t\t\t\trusia\t\t\t\tukraina            \r\n        \r\n\r\n        \r\n            \r\n    \r\n        \r\n            \r\n        \r\n            \r\n                Hoegeng Awards 2025\r\n            \r\n            \r\n                Baca kisah inspiratif kandidat polisi teladan di sini\r\n            \r\n        \r\n    \r\n    \r\n        Selengkapnya

7. Simpan hasil ke file CSV (opsional)

write.csv(berita_df, "hasil_crawling_detik.csv", row.names = FALSE)

8. Analisis tambahan (opsional)

8.1 Hitung jumlah kata dalam artikel

jumlah_kata <- str_count(konten, "\\S+")
cat("Jumlah kata dalam artikel:", jumlah_kata, "\n")
## Jumlah kata dalam artikel: 269

8.2 Ekstrak tanggal dalam format yang bisa dianalisis

tanggal_publikasi <- str_extract(waktu_publikasi, "\\d+\\s+\\w+\\s+\\d+") %>%
        dmy() # Mengubah ke format tanggal

8.3 Ekstrak kata kunci berdasarkan frekuensi (contoh sederhana)

kata_kata <- unlist(str_split(tolower(konten), "\\s+|\\.|,|;|:|\\(|\\)|\\[|\\]|-"))
kata_kata <- kata_kata[nchar(kata_kata) > 3] # Hapus kata-kata yang terlalu pendek
frekuensi_kata <- table(kata_kata)
kata_kunci <- sort(frekuensi_kata, decreasing = TRUE)[1:10]
print("Kata kunci berdasarkan frekuensi:")
## [1] "Kata kunci berdasarkan frekuensi:"
print(kata_kunci)
## kata_kata
##    rusia    drone serangan  ukraina     juga     kota    dalam     kyiv 
##       13        9        7        7        5        5        4        4 
##  wilayah     yang 
##        4        4

TAHAPAN WEB CRAWLING BERITA LIPUTAN6.COM MENGGUNAKAN R

1. Instalasi dan memuat library yang diperlukan

# Pastikan Anda menginstal paket-paket ini jika belum ada
if (!require("rvest")) install.packages("rvest")
if (!require("dplyr")) install.packages("dplyr")
if (!require("stringr")) install.packages("stringr")
if (!require("lubridate")) install.packages("lubridate")

# Memuat library
library(rvest)     # Untuk web scraping
library(dplyr)     # Untuk manipulasi data
library(stringr)   # Untuk manipulasi string
library(lubridate) # Untuk manipulasi tanggal

2. Mendefinisikan URL artikel yang akan di-crawl

url <- "https://www.liputan6.com/saham/read/5990266/daftar-saham-tercuan-saat-ihsg-melambung-502-persen"

3. Membaca konten HTML dari URL

# Ini adalah langkah pertama untuk mengakses konten web
halaman <- read_html(url)

4. Ekstraksi elemen-elemen berita

4.1 Mengekstrak judul artikel

judul <- halaman %>%
  html_element("h1.read-page--header--title") %>%
  html_text(trim = TRUE)
judul
## [1] "Daftar Saham Tercuan saat IHSG Melambung 5,02 Persen"

4.2 Mengekstrak waktu publikasi

waktu_publikasi <- halaman %>%
  html_element(".read-page--header--author__datetime") %>%
  html_text(trim = TRUE)
waktu_publikasi
## [1] "Diterbitkan 10 Apr 2025, 13:24 WIB"

4.3 Mengekstrak nama penulis

penulis <- halaman %>%
  html_element(".read-page--header--author__name") %>%
  html_text(trim = TRUE)
penulis
## [1] "Agustina Melani"

4.4 Mengekstrak konten artikel

konten <- halaman %>%
  html_elements(".article-content-body__item-content p") %>% 
  html_text(trim = TRUE) %>%
  paste(collapse = "\n\n")

konten
## [1] "Liputan6.com, Jakarta - Laju Indeks Harga Saham Gabungan (IHSG) melesat signifikan hingga penutupan perdagangan sesi pertama, Kamis (10/4/2025). Penguatan IHSG sentuh 5 persen usai Presiden Amerika Serikat (AS) Donald Trump tunda penerapan tarif impor selama 90 hari.\n\nMengutip data RTI, IHSG ditutup melonjak 5,02 persen ke posisi 6.267,85. Indeks LQ45 mendaki 5,76 persen ke posisi 707,94. Seluruh indeks saham acuan melonjak.\n\nBaca Juga\n\nPada sesi pertama, IHSG menyentuh level tertinggi 6.310,82 dan level terendah 6.188,67. Sebanyak 546 saham melonjak dan 94 saham melemah. 147 saham diam di tempat. Total frekuensi perdagangan 763.911 kali dengan volume perdagangan saham 14,2 miliar saham. Nilai transaksi harian Rp 9,7 triliun. Posisi dolar Amerika Serikat terhadap rupiah di kisaran 16.769.\n\nAdvertisement\n\nSeluruh sektor saham menghijau. Sektor saham basic menguat 8,92 persen, dan catat penguatan terbesar. Disusul sektor saham consumer siklikal mendaki 6,28 persen dan sektor saham infrastruktur bertambah 5,82 persen.\n\nSementara itu, sektor saham energi menanjak 5,59 persen, sektor saham industri bertambah 3,09 persen, sektor saham consumer nonsiklikal menguat 4,49 persen. Sektor saham kesehatan bertambah 2,57 persen, sektor saham keuangan mendaki 3,36 persen, sektor saham properti melesat 4,7 persen. Lalu sektor saham teknologi melompat 4,25 persen dan sektor saham transportasi menanjak 3,49 persen.\n\nPada sesi pertama perdagangan, saham INDY melambung 11,6 persen ke posisi Rp 1.010 per saham. Harga saham INDY dibuka naik 60 poin ke posisi Rp 965 per saham. Harga saham INDY berada di level tertinggi Rp 1.030 dan level terendah Rp 935 per saham. Total frekuensi perdagangan 2.850 kali dengan volume perdagangan 222.328 saham. Nilai transaksi Rp 21,6 miliar.\n\nSaham ITMG meroket 2,52 persen ke posisi Rp 23.350 per saham. Harga saham ITMG dibuka naik ke posisi Rp 23.300 per saham. Saham ITMG berada di level tertinggi Rp 23.600 dan level terendah Rp 23.075 per saham. Total frekuensi perdagangan 3.635 kali dengan volume perdagangan 21.512 saham. Nilai transaksi Rp 50,1 miliar.\n\nHarga saham AKRA melesat 18,89 persen ke posisi Rp 1.070 per saham. Saham AKRA dibuka naik 60 poin ke posisi Rp 960 per saham. Saham AKRA berada di level tertinggi Rp 1.085 dan level terendah Rp 960 per saham. Total frekuensi perdagangan 6.622 kali dengan volume perdagangan 346.894 saham. Nilai transaksi Rp 35,3 miliar.\n\nSaham HRUM naik 8,26 persen ke posisi Rp 655 per saham. Harga saham HRUM dibuka menguat 20 poin ke posisi Rp 625 per saham. Harga saham HRUM berada di level tertinggi Rp 670 dan level terendah Rp 620 per saham. Total frekuensi perdagangan 1.915 kali dengan volume perdagangan 123.543 saham. Nilai transaksi Rp 8,6 miliar.\n\n\n\n\n\nBursa saham Asia Pasifik menguat seiring harapan lebih banyak stimulus setelah Trump meningkatkan tarif terhadap China menjadi 125 persen. Para pemimpin negara itu bersiap untuk bertemu pada Kamis pekan ini untuk membahas langkah-langkah ekonomi tambahan.\n\nPerubahan sikap Trump terjadi ketika skala aksi jual di pasar obligasi pemerintah dan tekanan keuangan yang meningkat selama berhari-hari mengguncang investor dan memicu peringatan resesi dari CEO JPMorgan Jamie Dimon.\n\nβ€œKami pikir Trump mengalah, dan kemungkinan skenario β€œkerusakan terkendali” meningkat. Kami berharap Eropa dan Asia akan ikuti reli AS,” ujar Senior Macro Strategist Lombard Odier Ltd, Homin Lee, demikian mengutip dari Yahoo Finance.\n\nSetelah USD 10 triliun menguap dari bursa saham global dan obligasi pemerintah AS anjlok, Trump mengumumkan jeda 90 hari terhadap tarif timbal balik yang berlaku pada puluhan mitra dagang setelah tengah malam waktu setempat.\n\nHal itu setelah China membalas dan mengatakan akan menaikkan bea masuk terhadap barang AS menjadi 84 persen.\n\nNegara-negara yang terkena bea masuk timbal balik yang lebih tinggi yang mulai berlaku pada Rabu sekarang akan dikenakan pajak pada tarif dasar 10% yang sebelumnya diterapkan pada negara-negara lain, kecuali Tiongkok, menurut seorang pejabat Gedung Putih.\n\n\n\nTarif baru mulai berlaku pada pukul 12:01 dini hari waktu Washington pada 10 April, menurut panduan bea cukai yang dirilis pada Rabu malam, dan pungutan sebesar 125% pada Tiongkok menetapkan tarif tersebut mencakup Hong Kong dan Makau. \"Investor di seluruh Asia dan sekitarnya bernapas lega,\" kata Ekonom HSBC Holdings Plc, Frederic Neumann.\n\n\"Penundaan tarif timbal balik oleh AS memberi lebih banyak waktu untuk negosiasi. Bagi ekonomi Asia yang berpusat pada ekspor, hal ini sangat penting, mengingat dampak pertumbuhan yang akan ditimbulkan oleh tarif tinggi AS,” ia menambahkan.\n\nSementara ekuitas Tiongkok menguat karena ekspektasi stimulus, yuan dalam negeri jatuh ke level terlemah sejak 2007. Taruhan pada langkah pelonggaran moneter oleh Bank Sentral China untuk mendukung ekonomi juga membebani mata uang tersebut.\n\nKurang dari satu jam sebelum pernyataan Trump, penjualan obligasi 10 tahun senilai USD 39 miliar menarik permintaan yang baik, meskipun ada kekhawatiran oleh beberapa pihak di pasar kebijakannya dapat menghalangi pembeli asing. Hal itu menyusul reaksi suam-suam kuku terhadap penjualan obligasi tiga tahun pada Selasa, dan menggambarkan latar belakang yang lebih cerah untuk lelang obligasi 30 tahun pada Kamis."

4.5 Mengekstrak tag atau kategori (jika ada)

kategori <- halaman %>%
  html_element(".navbar--menu--item__link_active") %>%
  html_text(trim = TRUE)

kategori
## [1] "Saham"

4.6 Mengekstrak gambar utama (jika perlu)

url_gambar <- halaman %>%
  html_element("img.read-page--photo-gallery--item__picture-lazyload") %>%
  html_attr("src")
url_gambar
## [1] "https://cdn-production-assets-kly.akamaized.net/assets/images/blank.png"

5. Menyimpan hasil ekstraksi ke dalam data frame

berita_df <- data.frame(
        judul = judul,
        waktu_publikasi = waktu_publikasi,
        penulis = penulis,
        kategori = kategori,
        url = url,
        url_gambar = url_gambar,
        konten = konten,
        stringsAsFactors = FALSE
)

6. Tampilkan hasil ekstraksi

print(berita_df)
##                                                  judul
## 1 Daftar Saham Tercuan saat IHSG Melambung 5,02 Persen
##                      waktu_publikasi         penulis kategori
## 1 Diterbitkan 10 Apr 2025, 13:24 WIB Agustina Melani    Saham
##                                                                                               url
## 1 https://www.liputan6.com/saham/read/5990266/daftar-saham-tercuan-saat-ihsg-melambung-502-persen
##                                                                url_gambar
## 1 https://cdn-production-assets-kly.akamaized.net/assets/images/blank.png
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              konten
## 1 Liputan6.com, Jakarta - Laju Indeks Harga Saham Gabungan (IHSG) melesat signifikan hingga penutupan perdagangan sesi pertama, Kamis (10/4/2025). Penguatan IHSG sentuh 5 persen usai Presiden Amerika Serikat (AS) Donald Trump tunda penerapan tarif impor selama 90 hari.\n\nMengutip data RTI, IHSG ditutup melonjak 5,02 persen ke posisi 6.267,85. Indeks LQ45 mendaki 5,76 persen ke posisi 707,94. Seluruh indeks saham acuan melonjak.\n\nBaca Juga\n\nPada sesi pertama, IHSG menyentuh level tertinggi 6.310,82 dan level terendah 6.188,67. Sebanyak 546 saham melonjak dan 94 saham melemah. 147 saham diam di tempat. Total frekuensi perdagangan 763.911 kali dengan volume perdagangan saham 14,2 miliar saham. Nilai transaksi harian Rp 9,7 triliun. Posisi dolar Amerika Serikat terhadap rupiah di kisaran 16.769.\n\nAdvertisement\n\nSeluruh sektor saham menghijau. Sektor saham basic menguat 8,92 persen, dan catat penguatan terbesar. Disusul sektor saham consumer siklikal mendaki 6,28 persen dan sektor saham infrastruktur bertambah 5,82 persen.\n\nSementara itu, sektor saham energi menanjak 5,59 persen, sektor saham industri bertambah 3,09 persen, sektor saham consumer nonsiklikal menguat 4,49 persen. Sektor saham kesehatan bertambah 2,57 persen, sektor saham keuangan mendaki 3,36 persen, sektor saham properti melesat 4,7 persen. Lalu sektor saham teknologi melompat 4,25 persen dan sektor saham transportasi menanjak 3,49 persen.\n\nPada sesi pertama perdagangan, saham INDY melambung 11,6 persen ke posisi Rp 1.010 per saham. Harga saham INDY dibuka naik 60 poin ke posisi Rp 965 per saham. Harga saham INDY berada di level tertinggi Rp 1.030 dan level terendah Rp 935 per saham. Total frekuensi perdagangan 2.850 kali dengan volume perdagangan 222.328 saham. Nilai transaksi Rp 21,6 miliar.\n\nSaham ITMG meroket 2,52 persen ke posisi Rp 23.350 per saham. Harga saham ITMG dibuka naik ke posisi Rp 23.300 per saham. Saham ITMG berada di level tertinggi Rp 23.600 dan level terendah Rp 23.075 per saham. Total frekuensi perdagangan 3.635 kali dengan volume perdagangan 21.512 saham. Nilai transaksi Rp 50,1 miliar.\n\nHarga saham AKRA melesat 18,89 persen ke posisi Rp 1.070 per saham. Saham AKRA dibuka naik 60 poin ke posisi Rp 960 per saham. Saham AKRA berada di level tertinggi Rp 1.085 dan level terendah Rp 960 per saham. Total frekuensi perdagangan 6.622 kali dengan volume perdagangan 346.894 saham. Nilai transaksi Rp 35,3 miliar.\n\nSaham HRUM naik 8,26 persen ke posisi Rp 655 per saham. Harga saham HRUM dibuka menguat 20 poin ke posisi Rp 625 per saham. Harga saham HRUM berada di level tertinggi Rp 670 dan level terendah Rp 620 per saham. Total frekuensi perdagangan 1.915 kali dengan volume perdagangan 123.543 saham. Nilai transaksi Rp 8,6 miliar.\n\n\n\n\n\nBursa saham Asia Pasifik menguat seiring harapan lebih banyak stimulus setelah Trump meningkatkan tarif terhadap China menjadi 125 persen. Para pemimpin negara itu bersiap untuk bertemu pada Kamis pekan ini untuk membahas langkah-langkah ekonomi tambahan.\n\nPerubahan sikap Trump terjadi ketika skala aksi jual di pasar obligasi pemerintah dan tekanan keuangan yang meningkat selama berhari-hari mengguncang investor dan memicu peringatan resesi dari CEO JPMorgan Jamie Dimon.\n\nβ€œKami pikir Trump mengalah, dan kemungkinan skenario β€œkerusakan terkendali” meningkat. Kami berharap Eropa dan Asia akan ikuti reli AS,” ujar Senior Macro Strategist Lombard Odier Ltd, Homin Lee, demikian mengutip dari Yahoo Finance.\n\nSetelah USD 10 triliun menguap dari bursa saham global dan obligasi pemerintah AS anjlok, Trump mengumumkan jeda 90 hari terhadap tarif timbal balik yang berlaku pada puluhan mitra dagang setelah tengah malam waktu setempat.\n\nHal itu setelah China membalas dan mengatakan akan menaikkan bea masuk terhadap barang AS menjadi 84 persen.\n\nNegara-negara yang terkena bea masuk timbal balik yang lebih tinggi yang mulai berlaku pada Rabu sekarang akan dikenakan pajak pada tarif dasar 10% yang sebelumnya diterapkan pada negara-negara lain, kecuali Tiongkok, menurut seorang pejabat Gedung Putih.\n\n\n\nTarif baru mulai berlaku pada pukul 12:01 dini hari waktu Washington pada 10 April, menurut panduan bea cukai yang dirilis pada Rabu malam, dan pungutan sebesar 125% pada Tiongkok menetapkan tarif tersebut mencakup Hong Kong dan Makau. "Investor di seluruh Asia dan sekitarnya bernapas lega," kata Ekonom HSBC Holdings Plc, Frederic Neumann.\n\n"Penundaan tarif timbal balik oleh AS memberi lebih banyak waktu untuk negosiasi. Bagi ekonomi Asia yang berpusat pada ekspor, hal ini sangat penting, mengingat dampak pertumbuhan yang akan ditimbulkan oleh tarif tinggi AS,” ia menambahkan.\n\nSementara ekuitas Tiongkok menguat karena ekspektasi stimulus, yuan dalam negeri jatuh ke level terlemah sejak 2007. Taruhan pada langkah pelonggaran moneter oleh Bank Sentral China untuk mendukung ekonomi juga membebani mata uang tersebut.\n\nKurang dari satu jam sebelum pernyataan Trump, penjualan obligasi 10 tahun senilai USD 39 miliar menarik permintaan yang baik, meskipun ada kekhawatiran oleh beberapa pihak di pasar kebijakannya dapat menghalangi pembeli asing. Hal itu menyusul reaksi suam-suam kuku terhadap penjualan obligasi tiga tahun pada Selasa, dan menggambarkan latar belakang yang lebih cerah untuk lelang obligasi 30 tahun pada Kamis.

7. Simpan hasil ke file CSV (opsional)

write.csv(berita_df, "hasil_crawling_liputan6.csv", row.names = FALSE)

8. Analisis tambahan (opsional)

8.1 Hitung jumlah kata dalam artikel

jumlah_kata <- str_count(konten, "\\S+")
cat("Jumlah kata dalam artikel:", jumlah_kata, "\n")
## Jumlah kata dalam artikel: 782

8.2 Ekstrak tanggal dalam format yang bisa dianalisis

tanggal_publikasi <- str_extract(waktu_publikasi, "\\d+\\s+\\w+\\s+\\d+") %>%
        dmy() # Mengubah ke format tanggal

8.3 Ekstrak kata kunci berdasarkan frekuensi (contoh sederhana)

kata_kata <- unlist(str_split(tolower(konten), "\\s+|\\.|,|;|:|\\(|\\)|\\[|\\]|-"))
kata_kata <- kata_kata[nchar(kata_kata) > 3] # Hapus kata-kata yang terlalu pendek
frekuensi_kata <- table(kata_kata)
kata_kunci <- sort(frekuensi_kata, decreasing = TRUE)[1:10]
print("Kata kunci berdasarkan frekuensi:")
## [1] "Kata kunci berdasarkan frekuensi:"
print(kata_kunci)
## kata_kata
##       saham      persen        pada perdagangan      sektor       level 
##          49          20          15          12          12          11 
##      posisi        yang       tarif       harga 
##          11          11           8           7

TAHAPAN WEB CRAWLING BERITA LIPUTAN6.COM MENGGUNAKAN R V2

==================== 1. Install dan Load Library ====================

# Install required packages if not already installed
if (!require("rvest")) install.packages("rvest")
if (!require("dplyr")) install.packages("dplyr")
if (!require("stringr")) install.packages("stringr")
if (!require("tidytext")) install.packages("tidytext")
## Loading required package: tidytext
## Warning: package 'tidytext' was built under R version 4.4.3
if (!require("wordcloud")) install.packages("wordcloud")
## Loading required package: wordcloud
## Warning: package 'wordcloud' was built under R version 4.4.3
## Loading required package: RColorBrewer
if (!require("tm")) install.packages("tm")
## Loading required package: tm
## Warning: package 'tm' was built under R version 4.4.3
## Loading required package: NLP
# Load the libraries
library(rvest)
library(dplyr)
library(stringr)
library(tidytext)
library(wordcloud)
library(tm)

==================== 2. Fungsi Scraping Artikel ====================

scrape_liputan6_article <- function(url) {
  webpage <- read_html(url)
  
  # Ambil judul
  title <- webpage %>%
    html_element("h1.read-page--header--title") %>%
    html_text(trim = TRUE)
  
  # Ambil tanggal (handle jika tidak ada)
  published_date <- webpage %>%
    html_element("time.read-page--header--date") %>%
    html_text(trim = TRUE)
  if (is.na(published_date)) published_date <- "Tidak tersedia"
  
  # Ambil penulis (handle jika tidak ada)
  author <- webpage %>%
    html_element("span.read-page--header--author__name") %>%
    html_text(trim = TRUE)
  if (is.na(author)) author <- "Tidak tersedia"
  
  # Ambil konten artikel (fallback selector jika gagal)
  content <- webpage %>%
    html_elements("div.read-page--content--article p") %>%
    html_text2()
  
  if (length(content) == 0) {
    # Fallback: ambil semua paragraf <p>
    content <- webpage %>%
      html_elements("p") %>%
      html_text2()
  }
  
  content <- paste(content, collapse = " ") %>% str_squish()
  
  if (nchar(content) < 50) warning("Konten artikel terlalu pendek atau tidak berhasil diambil.")
  
  return(list(
    title = title,
    published_date = published_date,
    author = author,
    content = content
  ))
}

==================== 3. Fungsi Analisis Artikel ====================

analyze_article <- function(article) {
  cat("Judul: ", article$title, "\n")
  cat("Tanggal Publikasi: ", article$published_date, "\n")
  cat("Penulis: ", article$author, "\n\n")
  
  clean_text <- article$content %>%
    str_replace_all("[[:punct:]]", " ") %>%
    str_replace_all("[[:digit:]]", " ") %>%
    str_replace_all("\\s+", " ") %>%
    str_trim() %>%
    tolower()
  
  word_count <- str_count(clean_text, "\\S+")
  cat("Jumlah kata dalam artikel: ", word_count, "\n\n")
  
  if (word_count == 0) {
    warning("Tidak ada kata untuk dianalisis.")
    return(NULL)
  }
  
  docs <- Corpus(VectorSource(clean_text))
  
  stopwords_id <- c("yang", "dan", "di", "dengan", "untuk", "pada", "adalah", "ini", "dari", "dalam", 
                    "akan", "juga", "ke", "karena", "oleh", "secara", "tersebut", "bahwa", "kata",
                    "tidak", "itu", "telah", "ada", "hanya", "bisa", "dapat", "sudah", "saat", "seperti")
  
  docs <- tm_map(docs, content_transformer(tolower))
  docs <- tm_map(docs, removeWords, stopwords_id)
  docs <- tm_map(docs, removePunctuation)
  docs <- tm_map(docs, removeNumbers)
  docs <- tm_map(docs, stripWhitespace)
  
  tdm <- TermDocumentMatrix(docs)
  m <- as.matrix(tdm)
  word_freqs <- sort(rowSums(m), decreasing = TRUE)
  
  top_words <- head(word_freqs, 10)
  cat("Kata-kata yang paling sering muncul:\n")
  print(top_words)
  
  potential_entities <- c("Prabowo", "Gaza", "Israel", "Palestina", "Mesir", "evakuasi", "Indonesia", "Kemenlu", "DPR")
  entity_count <- sapply(potential_entities, function(x) str_count(article$content, regex(x, ignore_case = TRUE)))
  
  cat("\nEntitas yang terdeteksi dalam artikel:\n")
  for (i in seq_along(potential_entities)) {
    if (entity_count[i] > 0) {
      cat(potential_entities[i], ": ", entity_count[i], " kali\n")
    }
  }
  
  return(list(clean_text = clean_text, word_freqs = word_freqs))
}

==================== 4. Fungsi Word Cloud ====================

plot_wordcloud <- function(word_freqs) {
  if (length(word_freqs) == 0) {
    warning("Tidak ada kata untuk ditampilkan dalam word cloud.")
    return()
  }
  suppressWarnings({
    wordcloud(words = names(word_freqs),
              freq = word_freqs,
              min.freq = 2,
              max.words = 50,
              scale = c(3, 0.5),
              random.order = FALSE,
              rot.per = 0.2,
              colors = brewer.pal(8, "Dark2"))
  })
}

==================== 5. Eksekusi ====================

# Ganti dengan URL artikel yang ingin dianalisis
url <- "https://www.liputan6.com/news/read/5989757/anggota-komisi-i-dpr-dukung-rencana-prabowo-evakuasi-warga-gaza-ke-indonesia"

article <- scrape_liputan6_article(url)
analysis_result <- analyze_article(article)
## Judul:  Anggota Komisi I DPR Dukung Rencana Prabowo Evakuasi Warga Gaza ke Indonesia 
## Tanggal Publikasi:  Tidak tersedia 
## Penulis:  Delvira Hutabarat 
## 
## Jumlah kata dalam artikel:  547
## Warning in tm_map.SimpleCorpus(docs, content_transformer(tolower)):
## transformation drops documents
## Warning in tm_map.SimpleCorpus(docs, removeWords, stopwords_id): transformation
## drops documents
## Warning in tm_map.SimpleCorpus(docs, removePunctuation): transformation drops
## documents
## Warning in tm_map.SimpleCorpus(docs, removeNumbers): transformation drops
## documents
## Warning in tm_map.SimpleCorpus(docs, stripWhitespace): transformation drops
## documents
## Kata-kata yang paling sering muncul:
##     indonesia     palestina       prabowo          gaza          luka 
##            14            12            12            11            11 
##          anak        mereka        korban      presiden advertisement 
##            10            10             9             9             7 
## 
## Entitas yang terdeteksi dalam artikel:
## Prabowo :  12  kali
## Gaza :  11  kali
## Israel :  3  kali
## Palestina :  12  kali
## Mesir :  2  kali
## evakuasi :  10  kali
## Indonesia :  14  kali
## DPR :  1  kali
# Buat word cloud jika hasil analisis tidak kosong
if (!is.null(analysis_result)) {
  plot_wordcloud(analysis_result$word_freqs)
}

==================== Analisis Sentimen Sederhana ====================

positive_words <- c("berhasil", "baik", "setuju", "mendukung", "positif", "sukses", "maju", "efektif")
negative_words <- c("ditolak", "menolak", "kritik", "masalah", "sulit", "buruk", "gagal", "khawatir")

positive_count <- sum(str_count(analysis_result$clean_text , paste(positive_words, collapse = "|")))
negative_count <- sum(str_count(analysis_result$clean_text, paste(negative_words, collapse = "|")))

cat("\nAnalisis Sentimen Sederhana:\n")
## 
## Analisis Sentimen Sederhana:
cat("Kata-kata positif:", positive_count, "\n")
## Kata-kata positif: 4
cat("Kata-kata negatif:", negative_count, "\n")
## Kata-kata negatif: 0
if (positive_count > negative_count) {
  cat("πŸ‘‰ Artikel ini cenderung memiliki **sentimen positif**.\n")
} else if (negative_count > positive_count) {
  cat("πŸ‘‰ Artikel ini cenderung memiliki **sentimen negatif**.\n")
} else {
  cat("πŸ‘‰ Artikel ini memiliki **sentimen netral**.\n")
}
## πŸ‘‰ Artikel ini cenderung memiliki **sentimen positif**.

Code 1 - Parsing

Teknik Web Scrapping dengan Parsing HTML

Kelebihan

  1. Bisa digunakan untuk mayoritas situs berita

  2. Proses pengumpulan data relatif cepat.

Kelemahan

  1. Untuk website yang menggunakan login, prosesnya agak rumit.

  2. Harus menentukan target css dari website terlebih dahulu.

  3. Sulit digunakan pada website dinamis yang menggunakan javascript.

Library R ralger atau rvest

1. Scrapping Web Berita Online

Studi Kasus: Detik.com

# Jika belum punya library ralger atau rvest, install dulu dengan perintah berikut ini
# install.packages("ralger")
# install.packages("rvest")

url = "https://news.detik.com/internasional/d-7862500/drone-rusia-kembali-hantam-ibu-kota-ukraina-12-orang-luka"

# memanggil library
library("ralger")
## Warning: package 'ralger' was built under R version 4.4.3
# mengambil judul artikel (baris pertama)
judul = titles_scrap(url)[1]
judul
## [1] "\n        Drone Rusia Kembali Hantam Ibu Kota Ukraina, 12 Orang Luka    "

Setelah berhasil mengambil judul, kita akan coba ambil konten artikelnya

konten = paragraphs_scrap(url)
konten
##  [1] "Serangan drone-drone Rusia kembali menghantam ibu kota Ukraina, Kyiv, dan kota Mykolaiv di Ukraina selatan. Otoritas Ukraina mengatakan bahwa serangan tersebut melukai sedikitnya 12 orang."                                                                                                              
##  [2] "Dilansir Reuters dan Al-Arabiya, Kamis (10/4/2025), dua wanita terluka di Kyiv akibat serangan drone Rusia pada Rabu (9/4) malam waktu setempat itu. Drone-drone tersebut juga memicu kebakaran di fasilitas penyimpanan dan merusak bangunan tempat tinggal di Kyiv, kata administrasi militer kota Kyiv."
##  [3] "Pihak berwenang mencatat 30 drone di wilayah udara di atas ibu kota, 16 di antaranya hancur dan sisanya meninggalkan wilayah udara atau \"hilang.\""                                                                                                                                                       
##  [4] "\r\nSCROLL TO CONTINUE WITH CONTENT\r\n"                                                                                                                                                                                                                                                                   
##  [5] "Serangan itu juga melukai 10 orang di kota Mykolaiv, kata gubernur wilayah tersebut, Vitalii Kim."                                                                                                                                                                                                         
##  [6] "Serangan drone Rusia itu juga merusak sembilan gedung apartemen, 30 garasi, dan sebuah gedung administrasi, tambah Kim."                                                                                                                                                                                   
##  [7] "Dalam serangan-serangannya, Rusia membantah menargetkan warga sipil, tetapi ribuan orang telah tewas dan terluka dalam invasinya ke Ukraina."                                                                                                                                                              
##  [8] "Wilayah lainnya yang dihantam serangan drone Rusia adalah Kharkiv, yang berbatasan dengan Rusia. Seorang pejabat setempat melaporkan seorang pria berusia 65 tahun dan seorang wanita berusia 50 tahun mengalami luka-luka dalam serangan yang menghantam perusahaan sipil setempat."                      
##  [9] "Rusia terus membombardir Ukraina, meskipun pemerintahan Presiden AS Donald Trump telah menggelar beberapa putaran perundingan dengan para pejabat Ukraina dan Rusia, dengan harapan dapat menghentikan pertempuran. Sejauh ini, upaya pemerintahan Trump belum membuahkan hasil yang nyata."               
## [10] "Lihat Video 'Drone Tempur Rusia Hantam Apartemen di Dnipro, 15 Terluka':"                                                                                                                                                                                                                                  
## [11] "[Gambas:Video 20detik]"                                                                                                                                                                                                                                                                                    
## [12] ""

Berikutnya akan coba kita rapikan

judul = trimws(judul[1])
konten = paste(trimws(konten),collapse = "\n")
cat(judul,konten)
## Drone Rusia Kembali Hantam Ibu Kota Ukraina, 12 Orang Luka Serangan drone-drone Rusia kembali menghantam ibu kota Ukraina, Kyiv, dan kota Mykolaiv di Ukraina selatan. Otoritas Ukraina mengatakan bahwa serangan tersebut melukai sedikitnya 12 orang.
## Dilansir Reuters dan Al-Arabiya, Kamis (10/4/2025), dua wanita terluka di Kyiv akibat serangan drone Rusia pada Rabu (9/4) malam waktu setempat itu. Drone-drone tersebut juga memicu kebakaran di fasilitas penyimpanan dan merusak bangunan tempat tinggal di Kyiv, kata administrasi militer kota Kyiv.
## Pihak berwenang mencatat 30 drone di wilayah udara di atas ibu kota, 16 di antaranya hancur dan sisanya meninggalkan wilayah udara atau "hilang."
## SCROLL TO CONTINUE WITH CONTENT
## Serangan itu juga melukai 10 orang di kota Mykolaiv, kata gubernur wilayah tersebut, Vitalii Kim.
## Serangan drone Rusia itu juga merusak sembilan gedung apartemen, 30 garasi, dan sebuah gedung administrasi, tambah Kim.
## Dalam serangan-serangannya, Rusia membantah menargetkan warga sipil, tetapi ribuan orang telah tewas dan terluka dalam invasinya ke Ukraina.
## Wilayah lainnya yang dihantam serangan drone Rusia adalah Kharkiv, yang berbatasan dengan Rusia. Seorang pejabat setempat melaporkan seorang pria berusia 65 tahun dan seorang wanita berusia 50 tahun mengalami luka-luka dalam serangan yang menghantam perusahaan sipil setempat.
## Rusia terus membombardir Ukraina, meskipun pemerintahan Presiden AS Donald Trump telah menggelar beberapa putaran perundingan dengan para pejabat Ukraina dan Rusia, dengan harapan dapat menghentikan pertempuran. Sejauh ini, upaya pemerintahan Trump belum membuahkan hasil yang nyata.
## Lihat Video 'Drone Tempur Rusia Hantam Apartemen di Dnipro, 15 Terluka':
## [Gambas:Video 20detik]

Kita bisa simpan hasilnya di file teks

cat(judul,file="1. DetikCom.txt",sep="\n")
cat(konten,file="1. DetikCom.txt",append=TRUE)

2. Scrapping Web Berita Online2

Studi Kasus: Bank Syariah Indonesia (BRIS) di IPOTNEWS

url = "https://health.detik.com/berita-detikhealth/d-7481184/tabel-berat-badan-ideal-dari-kemenkes"
tabel_hasil = table_scrap(url)
## Warning: The `fill` argument of `html_table()` is deprecated as of rvest 1.0.0.
## β„Ή An improved algorithm fills by default so it is no longer needed.
## β„Ή The deprecated feature was likely used in the rvest package.
##   Please report the issue at <https://github.com/tidyverse/rvest/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
tabel_hasil
## # A tibble: 15 Γ— 4
##    `Tinggi Badan (cm)` `Bentuk Badan Kecil (kg)` `Bentuk Badan Sedang (kg)`
##                  <int> <chr>                     <chr>                     
##  1                 157 51-53                     54-59                     
##  2                 160 52-56                     55-60                     
##  3                 162 54-57                     56-62                     
##  4                 165 55-59                     58-63                     
##  5                 168 56-60                     60-65                     
##  6                 170 58-62                     62-68                     
##  7                 173 60-64                     63-69                     
##  8                 175 62-66                     65-71                     
##  9                 178 64-68                     66-73                     
## 10                 180 66-70                     68-75                     
## 11                 183 67-72                     70-77                     
## 12                 185 68-74                     72-80                     
## 13                 188 71-76                     74-82                     
## 14                 190 73-78                     76-84                     
## 15                 193 75-80                     78-86                     
## # β„Ή 1 more variable: `Bentuk Badan Besar (kg)` <chr>

Tabelnya terlalu panjang, dapat kita ringkas saja

knitr::kable(tabel_hasil)
Tinggi Badan (cm) Bentuk Badan Kecil (kg) Bentuk Badan Sedang (kg) Bentuk Badan Besar (kg)
157 51-53 54-59 57-64
160 52-56 55-60 59-66
162 54-57 56-62 60-67
165 55-59 58-63 61-69
168 56-60 60-65 63-71
170 58-62 62-68 65-73
173 60-64 63-69 67-75
175 62-66 65-71 69-77
178 64-68 66-73 71-79
180 66-70 68-75 72-81
183 67-72 70-77 75-84
185 68-74 72-80 76-86
188 71-76 74-82 79-88
190 73-78 76-84 80-91
193 75-80 78-86 83-93

Lalu bisa simpan ke dalam file Excel

library(openxlsx)
write.xlsx(tabel_hasil, "2. BB_Ideal_Detik.xlsx")

3. Scrapping Web Berita Online3

Studi Kasus: Rumah Syariah di OLX

url = "https://finance.detik.com/"

hasil = tidy_scrap(url,c(".media__title", ".media__date"),
  c("judul", "waktu"))
## Warning in (function (..., deparse.level = 1) : number of rows of result is not
## a multiple of vector length (arg 2)
knitr::kable(hasil)
judul waktu
Last updated :Kamis, 10 Apr 2025 13:20 WIB
Data is a realtime snapshot, delayed at least 10 minutes 8 menit yang lalu
Terungkap Alasan China Tak Gentar Kena Tarif Trump 125% 23 menit yang lalu
Berburu Emas, Warga Antre di Butik LM Antam Pulogadung 28 menit yang lalu
Trump Geram China Melawan Terus, Langsung Patok Tarif Impor 125% 37 menit yang lalu
Sebanyak Ini Orang yang Mau Beli Emas Antam 1 jam yang lalu
Tiket Kereta Eksekutif Dijual Mulai Rp 40.000, Ini Rutenya 1 jam yang lalu
RI Mau Relaksasi TKDN Gara-gara Tarif Trump 32%, Wamenperin Bilang Begini 1 jam yang lalu
Pidato di Hadapan Parlemen Turki, Prabowo: Saya Agak Grogi 2 jam yang lalu
Bank DKI Pastikan Data dan Dana Nasabah Aman Usai Gangguan Sistem 2 jam yang lalu
Penyerapan Bulog Capai 800 Ribu Ton Selama Panen Raya 2 jam yang lalu
Terungkap Alasan China Tak Gentar Kena Tarif Trump 125% 2 jam yang lalu
Harga Emas Antam Hari Ini Tertinggi Sepanjang Masa 2 jam yang lalu
Trump Tunda Tarif Impor, Wamenkeu Bilang Begini 2 jam yang lalu
BSI Bidik Transaksi Ritel UMKM di Pasar Tradisional 3 jam yang lalu
Drama Sidang Praperadilan Kedua Hasto Vs KPK 3 jam yang lalu
Kisah Pilot Helikopter Banting Setir Jadi Pebisnis Teh 3 jam yang lalu
Panen Cuan Layanan Sayang Anabul 3 jam yang lalu
Menangkis Serangan Hoaks Tarik Duit dari Bank 3 jam yang lalu
Bisnis Kura Kura Darat yang Bikin Dompet Gemuk 3 jam yang lalu
Mendulang Kasih dan Rupiah di Hari Raya Lewat Hampers Minggu, 30 Mar 2025 19:30 WIB
Ide Bisnis Lilin Aromaterapi dari Rumah, Cetak Omzet Ratusan Juta Sabtu, 29 Mar 2025 22:09 WIB
Rahasia Bisnis Batik KEkinian Omzet ratusan Juta Jumat, 28 Mar 2025 15:13 WIB
Rahasia Bisnis Batik Kekinian Beromzet Ratusan Juta Rupiah 4 jam yang lalu
Berburu Emas, Warga Antre di Butik LM Antam Pulogadung 4 jam yang lalu
Trump Geram China Melawan Terus, Langsung Patok Tarif Impor 125% 4 jam yang lalu
Sri Mulyani Sebut Tarif Trump Bisa Pangkas Pertumbuhan Ekonomi RI 0,5% 4 jam yang lalu
Sri Mulyani Minta Ekonom Tak Bikin Resah soal Ekonomi RI 4 jam yang lalu
Budi Arie Sebut Koperasi Merah Putih Bakal Pasok MBG 4 jam yang lalu
Bahlil Ungkap 54% Impor LPG Indonesia Berasal dari AS 4 jam yang lalu
Tunda Tarif buat Puluhan Negara, Trump Fokus Perang Dagang dengan China 4 jam yang lalu
Ekonomi China Diperkirakan Melambat Imbas Tarif Trump 4 jam yang lalu
Sempat Meledak, Harga Cabai Diramal Turun 2 Minggu Lagi 4 jam yang lalu
Imbas Perang Dagang, Harta Kekayaan Elon Musk-Mark Zuckerberg Merosot 5 jam yang lalu
KKP dan PT Garam Uji Stok 240 Ribu Ton Garam untuk Industri Makanan 5 jam yang lalu
Tak Pernah Kerja Kantoran, Pria Ini Raup Ratusan Juta dari Kue buat Hampers 5 jam yang lalu
Sepenggal Kisah Starling yang Bertahan di Tengah Tren Kopi Kekinian 5 jam yang lalu
Modal Oven Hasil Doorprize, Retno Jadi Pengusaha Kue Kering Lebaran 5 jam yang lalu
IHSG Melesat, Berakhir di Level 6.254 5 jam yang lalu
Pembentukan Satgas PHK Tunggu Inpres Prabowo 5 jam yang lalu
Stok Melimpah, Harga Ikan di Kendari Turun 5 jam yang lalu
Pemerintah Klaim Stok Beras RI Tertinggi dalam 20 Tahun 5 jam yang lalu
Sri Mulyani Sebut Penyaluran Pupuk Subsidi 1,7 Juta Ton di Awal 2025 5 jam yang lalu
IHSG Bergejolak & Rupiah Loyo, Investasi Emas Cuan Terus 6 jam yang lalu
Grab Ungkap Alasan Ada Driver Ojol yang Tak Dapat β€˜THR’ 6 jam yang lalu
Jurus BUMN Kurangi Emisi Karbon dan Transformasi Energi 6 jam yang lalu
Soal Pembangunan 80 Ribu Kopdes, Budi Arie: Butuh Waktu, Emang Bikin Martabak? 6 jam yang lalu
Tiket Kereta Eksekutif Dijual Mulai Rp 40.000, Ini Rutenya 6 jam yang lalu
Wamentan Jelaskan soal Kuota Impor Mau Dihapus Prabowo 6 jam yang lalu
Wamenaker Bakal Audit Aplikator yang Beri β€˜THR’ Driver Ojol Hanya Rp 50.000 7 jam yang lalu
Operator Pelabuhan Buka Suara soal Macet di Tanjung Priok 7 jam yang lalu
BI Ungkap Penyebab Indeks Harga Konsumen di Maret Alami Inflasi 7 jam yang lalu
Tarif Impor Trump Bikin Pengusaha China di Amazon Khawatir 7 jam yang lalu
Prabowo Mau Bikin 80 Ribu Koperasi Merah Putih, Butuh Modal Rp 400 T 7 jam yang lalu
Suminto & Suryo Utomo Kompak Mundur dari Dewan Komisaris PT SMI 7 jam yang lalu
Sengaja Tak Lapor SPT Pajak Bertahun-tahun Bisa Dipenjara! 8 menit yang lalu
18 Ribu Orang Kena PHK Awal Tahun, Paling Banyak di Sektor Manufaktur 23 menit yang lalu
Menerka Strategi Baru Pemerintah Soal Manuver Tarif Trump 28 menit yang lalu
Driver Ojol Bakal Dapat THR Setiap Tahun, Pemerintah Siapkan Aturannya 37 menit yang lalu
Kuota Impor Mau Dihapus Prabowo, Nasib Komoditas Pangan Gimana? 1 jam yang lalu
Pasar Saham Global Bangkit Usai Trump Umumkan Penundaan Tarif 1 jam yang lalu
Tips Beli Emas Antam di Butik biar Kebagian Stok 1 jam yang lalu
Menteri Prabowo Kumpul Bahas Koperasi Merah Putih, Mau Bikin Satgas Khusus 2 jam yang lalu
Pengusaha Elektronik Wanti-wanti Pelonggaran TKDN Bisa Bikin Investor Kabur 2 jam yang lalu
Prabowo-Erdogan Cari Cara Redam Dampak Perang Dagang 2 jam yang lalu
Foto Udara Pembangunan Sentra Kelautan dan Perikanan Terpadu di Sabang 2 jam yang lalu
Sebanyak Ini Orang yang Mau Beli Emas Antam 2 jam yang lalu
Kemnaker Panggil Aplikator Buntut Ada Driver Ojol Tak Dapat β€˜THR’ 2 jam yang lalu
IHSG Perkasa di Jeda Siang, Menguat 5,02% 3 jam yang lalu
Aturan Kemasan Polos Rokok Disebut Mengancam Industri Rokok 3 jam yang lalu
tarif impor 3 jam yang lalu
ihsg 3 jam yang lalu
harga emas 3 jam yang lalu
Trump Geram China Melawan Terus, Langsung Patok Tarif Impor 125% 3 jam yang lalu
Berburu Emas, Warga Antre di Butik LM Antam Pulogadung Minggu, 30 Mar 2025 19:30 WIB
Terungkap Alasan China Tak Gentar Kena Tarif Trump 125% Sabtu, 29 Mar 2025 22:09 WIB
Harga Emas Antam Hari Ini Tertinggi Sepanjang Masa Jumat, 28 Mar 2025 15:13 WIB
Tiket Kereta Eksekutif Dijual Mulai Rp 40.000, Ini Rutenya 4 jam yang lalu
Dua Biang Kerok Trump Balas Indonesia Lewat Tarif Impor 32% 4 jam yang lalu
Prabowo Telah Siapkan Tiga Gebrakan Hadapi Tarif Impor Trump 4 jam yang lalu
Vietnam Pakai Cara β€˜Tak Biasa’ Hadapi Tarif Trump 46% 4 jam yang lalu

Lalu bisa simpan ke dalam file Excel

library(openxlsx)
write.xlsx(hasil, "3. Finance_News_Detik.xlsx")

Code 2- User Agent

Teknik Web Scrapping dengan User Agent

Kelebihan

  1. Lebih cepat dan bisa dilakukan untuk website yang sulit di-scraping

  2. Meniru perilaku pengguna di browser, misalnya Google Chrome, bisa diganti untuk browser lainnya.

Kelemahan

  1. Belum tentu berlaku sama untuk setiap website.

Library R rvest atau RSelenium

Scrapping GoFood

Studi Kasus: Restoran di Yogyakarta

library(rvest)
library(knitr)

# URL target
url <- "https://finance.detik.com/"

# Ambil data
saham <- 
  read_html(url) %>%
  html_nodes(".datafx__item--title") %>%
  html_text(trim = TRUE)

nilai <- 
  read_html(url) %>%
  html_nodes(".datafx__item--value") %>%
  html_text(trim = TRUE)

# Gabungkan dan tampilkan
knitr::kable(data.frame(saham, nilai))
saham nilai
LQ45 707.11
IHSG 6,254.02
JII 392.69
HSI 20,681.78
N225 34,599.00
USD/IDR 16,795.00
SGD/IDR 12,589.01
JPY/IDR 115.80
EUR/IDR 18,671.48
GBP/IDR 21,662.19
EUR/USD 1.11
GBP/USD 1.29
USD/CNY 7.34
USD/SGD 1.33
USD/JPY 145.02
Emas 1,689,609.25
Silver 30.90
Crude Oil 59.56
Sawit 4,204.00
Nickel 14,695.00

Lalu bisa simpan ke dalam file Excel

library(openxlsx)
write.xlsx(data.frame(saham,nilai), "4. saham.xlsx")

Code 3 - API

Teknik Web Scrapping dengan Application Programming Interface (API) resmi

Kelebihan

  1. Legal, resmi, sah

  2. Lebih mudah dan relatif cepat.

Kelemahan

  1. Tidak semua website resmi menyediakan API.

  2. Kadang mesti mendaftar dulu sebagai developer.

  3. Biasanya data hasil scrape memiliki format .json yang jarang dikenal orang awam.

Library R jsonlite, tidyverse

Scrapping Web Resmi Badan Pusat Statistik

Studi Kasus: Press Release Inflasi Bulan Juli Tahun 2022

# Jika belum punya library jsonlite, install dulu dengan perintah berikut ini
# install.packages("jsonlite, tidyverse")

library(jsonlite)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## βœ” forcats 1.0.0     βœ” readr   2.1.5
## βœ” ggplot2 3.5.1     βœ” tibble  3.2.1
## βœ” purrr   1.0.2     βœ” tidyr   1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## βœ– ggplot2::annotate()     masks NLP::annotate()
## βœ– dplyr::filter()         masks stats::filter()
## βœ– purrr::flatten()        masks jsonlite::flatten()
## βœ– readr::guess_encoding() masks rvest::guess_encoding()
## βœ– dplyr::lag()            masks stats::lag()
## β„Ή Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
data = jsonlite::fromJSON("https://webapi.bps.go.id/v1/api/view/domain/0000/model/pressrelease/lang/ind/id/1863/key/0ae03f5adc1cfe6ebc7757af94bd382c/")

Kita bisa merapikan data tersebut dan menyimpan hasilnya di file teks

glimpse(data)
## List of 3
##  $ status           : chr "OK"
##  $ data-availability: chr "available"
##  $ data             :List of 11
##   ..$ brs_id   : int 1863
##   ..$ title    : chr "Inflasi terjadi pada Juli 2022 sebesar 0,64 persen. Inflasi tertinggi terjadi di Kendari sebesar 2,27 persen."
##   ..$ abstract : chr "&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-size: 10pt;&quo"| __truncated__
##   ..$ rl_date  : chr "2022-08-01"
##   ..$ updt_date: chr "2022-08-01"
##   ..$ pdf      : chr "https://webapi.bps.go.id/download.php?f=I8y9paPxEtvjM3hXIVtfIUZET2lCdklsUlpVOVc2UU96cXlyMENiUFpwUVQ5bFN4Sm02Tjl"| __truncated__
##   ..$ size     : chr "1.86 MB"
##   ..$ hit      : int 43971
##   ..$ thumbnail: chr "https://webapi.bps.go.id/cover.php?f=34cwgmipFLFsBiG7gNi0U010RTMyWUFPME9iQlp1VVVJWmJkS0ZYNU5iSFVOM21Ea0w4Zk5PUG"| __truncated__
##   ..$ slide    : chr "https://webapi.bps.go.id/download.php?f=0y0x/9mVuX0QTrbl6A2DTU5VSW4vWnNYVDRscFFVMTQvZVZPc0MxcGM1U3V6d0pkR1VPZzV"| __truncated__
##   ..$ related  :'data.frame':    5 obs. of  5 variables:
##   .. ..$ brs_id   : int [1:5] 1660 1767 1438 1766 1657
##   .. ..$ title    : chr [1:5] "Pada Juni 2020 Terjadi Inflasi Sebesar 0,18 Persen. Inflasi Tertinggi Terjadi Di Kendari Sebesar 1,33 Persen." "Inflasi Terjadi Pada Agustus 2021 Sebesar 0,03 Persen. Inflasi Tertinggi Terjadi Di Kendari Sebesar 0,62 Persen." "Oktober 2018 Inflasi Sebesar 0,28 Persen. Inflasi Tertinggi Terjadi Di Palu Sebesar 2,27 Persen." "Inflasi Terjadi Pada Juli 2021 Sebesar 0,08 Persen. Inflasi Tertinggi Terjadi Di Sorong Sebesar 1,51 Persen." ...
##   .. ..$ rl_date  : chr [1:5] "2020-07-01" "2021-09-01" "2018-11-01" "2021-08-02" ...
##   .. ..$ url      : chr [1:5] "https://www.bps.go.id/pressrelease/2020/07/01/1660/pada-juni-2020-terjadi-inflasi-sebesar-0-18-persen-inflasi-t"| __truncated__ "https://www.bps.go.id/pressrelease/2021/09/01/1767/inflasi-terjadi-pada-agustus-2021-sebesar-0-03-persen-inflas"| __truncated__ "https://www.bps.go.id/pressrelease/2018/11/01/1438/oktober-2018-inflasi-sebesar-0-28-persen-inflasi-tertinggi-t"| __truncated__ "https://www.bps.go.id/pressrelease/2021/08/02/1766/inflasi-terjadi-pada-juli-2021-sebesar-0-08-persen-inflasi-t"| __truncated__ ...
##   .. ..$ thumbnail: chr [1:5] "https://webapi.bps.go.id/cover.php?f=giRBRG7gwMBVMALDn3QZmUg3S2hzWkVlOWxLRFM1b3laWDFEUFB5Q2lQZUdkRGNaZkFMZENLNk"| __truncated__ "https://webapi.bps.go.id/cover.php?f=o3Z50fPCDF9Hwo0priGuGlVDOGZ1RnBWbkRhOUJCdXNNZzJoeW9ZdkdENUxkZng3a3NMQnM1di"| __truncated__ "https://webapi.bps.go.id/cover.php?f=iQGHGuhcp7bWxD8I7IA6fWw2a1dUSW1HeGdMWFlncERTVGxIRElmMEhuMEcxVTBpdlZXcVJ3Qz"| __truncated__ "https://webapi.bps.go.id/cover.php?f=rt/YKciZeWJGDjfBLbfyEFdyQ2JwOUovWk5FWWRXMENkVkJVNjc1RlpIeVErbUVGelFaMUJ1RG"| __truncated__ ...
datarapi<- stringi::stri_list2matrix(data, byrow = TRUE, fill = "")
## Warning in stringi::stri_list2matrix(data, byrow = TRUE, fill = ""): argument
## is not an atomic vector; coercing
cat(datarapi,file="5. BPS.txt",append=TRUE)