Web Scraping Berita Kompas dengan Python Scrapy |
Seiring dengan perkembangan media daring, kebutuhan masyarakat terhadap informasi demikian tinggi. Bila untuk memperoleh informasi, masyarakat harus membeli koran, majalah, atau media cetak lainnya, kini informasi itu bisa didapatkan dari ujung jemari saja. Era disrupsi mendorong sejumlah media cetak bertransformasi menjadi media daring, salah satunya adalah kompas.com.
Setiap berita yang berada di halaman-halaman daring media sebenarnya merupakan sekumpulan data dan informasi yang berjumlah besar sehingga memerlukan daya tampung penyimpan yang besar. Selain itu, kecepatan dan daya update kontennya juga cukup tinggi sehingga dalam konteks era Data Science, berita-berita tersebut memenuhi syarat sebagai Big Data.
Pada kesempatan kali ini, kita akan belajar bersama bagaimana menambang data dari berita daring. Adapun target media yang akan kita jadikan sebagai ajang latihan adalah kompas.com, sebuah media daring terbesar sekaligus mempunyai jangkauan luas di Indonesia sejauh ini. Berikut display halaman kompas.com yang akan kita scrape beritanya:
Laman indeks berita kompas.com |
Sebelum melakukan web scraping berita kompas.com, beberapa package yang diperlukan yaitu scrapy, pandas, requests, wordcloud, matplotlib, serta package yang khusus menangani data teks berbahasa Indonesia, yaitu package Sastrawi.
Dalam melakukan web scraping berita, tool yang kita gunakan untuk memperoleh node menggunakan CSS Selector atau bisa juga menggunakan Addons chrome, yakni Selector Gadget. Berikut langkah-langkah web scraping berita kompas.com:
#Import dan aktivasi package
import pandas as pd
import requests
from scrapy.http import TextResponse
C:\Users\56848\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\__init__.py:102: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (5.1.0)/charset_normalizer (2.0.12) doesn't match a supported version! warnings.warn("urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported "
#Deklarasi alamat situs
url = "https://indeks.kompas.com/"
res = requests.get(url)
respon = TextResponse(res.url, body = res.text, encoding = "utf-8")
#Melihat status website
kompas = respon.css(".latest--indeks")
kompas
[<Selector xpath="descendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), ' latest--indeks ')]" data='<div class="latest--indeks mt2 clearf...'>]
#Scrape judul berita
judul = respon.css(".article__link::text").getall()
judul
['Cara ke Pameran Artefak Nabi Muhammad Naik KRL dan Transjakarta', 'Viral, Video TKW Hong Kong Dikenai Denda Rp 9 Juta karena Beli Gamis Rp 200.000, Bea Cukai: Itu Penipuan', 'Disayangkan, Lokomotif Tua dari Kediri dan Pemalang Dipinjamkan ke Belanda', 'Memilih Parfum Mobil Harus Benar, jika Salah Bisa Merusak Komponen Ini', 'Resep Kue Ulat Sutra, Gurih dengan Penggunaan Kaldu Bubuk ', 'Buka Lelang Impor Beras, Bos Bulog: 4 Negara Sudah Menawarkan', 'Mendagri Hadiri Rapat Paripurna Pengesahan Perppu Pemilu, 43 Anggota DPR Hadir Fisik', 'Polda Metro: Unggahan Baju Bekas yang Disebut "Ditilap" Penyidik adalah Foto Konferensi Pers', '1 Perampok yang Tewaskan Sopir Taksi "Online" di Tol Jagorawi Ditangkap, 2 Buron', 'Meneladani Ekalaya di Era Merdeka Belajar', 'Alasan Logo Twitter Berubah Jadi Gambar Anjing Shiba Inu Hari Ini', 'Golkar: PDI-P Sampai Sekarang Masih Ambil Posisi Sendirian Hadapi Pemilu 2024, Kita Kormati', 'Emas Antam Naik Rp 5.000, Simak Rincian Harganya', 'Seleksi Mandiri UNY 2023, Simak Jadwal dan Syaratnya', 'Indonesia Dapat Hibah 15 Rantis Bushmaster dari Australia']
#Scrape tanggal posting berita
tgl = respon.css(".article__date::text").getall()
tgl
['04/04/2023, 10:15 WIB', '04/04/2023, 10:15 WIB', '04/04/2023, 10:13 WIB', '04/04/2023, 10:12 WIB', '04/04/2023, 10:11 WIB', '04/04/2023, 10:09 WIB', '04/04/2023, 10:09 WIB', '04/04/2023, 10:09 WIB', '04/04/2023, 10:08 WIB', '04/04/2023, 10:05 WIB', '04/04/2023, 10:05 WIB', '04/04/2023, 10:04 WIB', '04/04/2023, 10:03 WIB', '04/04/2023, 10:03 WIB', '04/04/2023, 10:02 WIB']
#Scrape link berita
link = respon.css(".article__link::attr(href)").getall()
link
['https://travel.kompas.com/read/2023/04/04/101500727/cara-ke-pameran-artefak-nabi-muhammad-naik-krl-dan-transjakarta', 'https://www.kompas.com/tren/read/2023/04/04/101500065/viral-video-tkw-hong-kong-dikenai-denda-rp-9-juta-karena-beli-gamis-rp', 'https://www.kompas.com/global/read/2023/04/04/101300370/disayangkan-lokomotif-tua-dari-kediri-dan-pemalang-dipinjamkan-ke-belanda', 'https://otomotif.kompas.com/read/2023/04/04/101200115/memilih-parfum-mobil-harus-benar-jika-salah-bisa-merusak-komponen-ini', 'https://www.kompas.com/food/read/2023/04/04/101100175/resep-kue-ulat-sutra-gurih-dengan-penggunaan-kaldu-bubuk-', 'https://money.kompas.com/read/2023/04/04/100951126/buka-lelang-impor-beras-bos-bulog-4-negara-sudah-menawarkan', 'https://nasional.kompas.com/read/2023/04/04/10091191/mendagri-hadiri-rapat-paripurna-pengesahan-perppu-pemilu-43-anggota-dpr', 'https://megapolitan.kompas.com/read/2023/04/04/10090031/polda-metro-unggahan-baju-bekas-yang-disebut-ditilap-penyidik-adalah-foto', 'https://megapolitan.kompas.com/read/2023/04/04/10085601/1-perampok-yang-tewaskan-sopir-taksi-online-di-tol-jagorawi-ditangkap-2', 'https://www.kompas.com/edu/read/2023/04/04/100543771/meneladani-ekalaya-di-era-merdeka-belajar', 'https://www.kompas.com/tren/read/2023/04/04/100539465/alasan-logo-twitter-berubah-jadi-gambar-anjing-shiba-inu-hari-ini', 'https://nasional.kompas.com/read/2023/04/04/10043681/golkar-pdi-p-sampai-sekarang-masih-ambil-posisi-sendirian-hadapi-pemilu-2024', 'https://money.kompas.com/read/2023/04/04/100300026/emas-antam-naik-rp-5.000-simak-rincian-harganya', 'https://www.kompas.com/edu/read/2023/04/04/100300171/seleksi-mandiri-uny-2023-simak-jadwal-dan-syaratnya', 'https://nasional.kompas.com/read/2023/04/04/10023911/indonesia-dapat-hibah-15-rantis-bushmaster-dari-australia']
#Membuat dataframe hasil scraping berita kompas
berita_kompas = pd.DataFrame({'Judul_Berita':judul, 'Tanggal_Berita':tgl,'Link_Berita':link})
berita_kompas
Judul_Berita | Tanggal_Berita | Link_Berita | |
---|---|---|---|
0 | Cara ke Pameran Artefak Nabi Muhammad Naik KRL... | 04/04/2023, 10:15 WIB | https://travel.kompas.com/read/2023/04/04/1015... |
1 | Viral, Video TKW Hong Kong Dikenai Denda Rp 9 ... | 04/04/2023, 10:15 WIB | https://www.kompas.com/tren/read/2023/04/04/10... |
2 | Disayangkan, Lokomotif Tua dari Kediri dan Pem... | 04/04/2023, 10:13 WIB | https://www.kompas.com/global/read/2023/04/04/... |
3 | Memilih Parfum Mobil Harus Benar, jika Salah B... | 04/04/2023, 10:12 WIB | https://otomotif.kompas.com/read/2023/04/04/10... |
4 | Resep Kue Ulat Sutra, Gurih dengan Penggunaan ... | 04/04/2023, 10:11 WIB | https://www.kompas.com/food/read/2023/04/04/10... |
5 | Buka Lelang Impor Beras, Bos Bulog: 4 Negara S... | 04/04/2023, 10:09 WIB | https://money.kompas.com/read/2023/04/04/10095... |
6 | Mendagri Hadiri Rapat Paripurna Pengesahan Per... | 04/04/2023, 10:09 WIB | https://nasional.kompas.com/read/2023/04/04/10... |
7 | Polda Metro: Unggahan Baju Bekas yang Disebut ... | 04/04/2023, 10:09 WIB | https://megapolitan.kompas.com/read/2023/04/04... |
8 | 1 Perampok yang Tewaskan Sopir Taksi "Online" ... | 04/04/2023, 10:08 WIB | https://megapolitan.kompas.com/read/2023/04/04... |
9 | Meneladani Ekalaya di Era Merdeka Belajar | 04/04/2023, 10:05 WIB | https://www.kompas.com/edu/read/2023/04/04/100... |
10 | Alasan Logo Twitter Berubah Jadi Gambar Anjing... | 04/04/2023, 10:05 WIB | https://www.kompas.com/tren/read/2023/04/04/10... |
11 | Golkar: PDI-P Sampai Sekarang Masih Ambil Posi... | 04/04/2023, 10:04 WIB | https://nasional.kompas.com/read/2023/04/04/10... |
12 | Emas Antam Naik Rp 5.000, Simak Rincian Harganya | 04/04/2023, 10:03 WIB | https://money.kompas.com/read/2023/04/04/10030... |
13 | Seleksi Mandiri UNY 2023, Simak Jadwal dan Sya... | 04/04/2023, 10:03 WIB | https://www.kompas.com/edu/read/2023/04/04/100... |
14 | Indonesia Dapat Hibah 15 Rantis Bushmaster dar... | 04/04/2023, 10:02 WIB | https://nasional.kompas.com/read/2023/04/04/10... |
#Aktivasi beberapa pacakge untuk visualisasi
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from wordcloud import STOPWORDS
import matplotlib.pyplot as plt
#Visualisasi
text = " ".join(i for i in berita_kompas.Judul_Berita)
stopwords = set(STOPWORDS)
wordcloud = WordCloud(stopwords = stopwords, background_color = "white").generate(text)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation = "bilinear")
plt.axis("off")
plt.show()
#Pembersihan teks judul dari kata-kata yang tidak diperlukan
from Sastrawi.StopWordRemover.StopWordRemoverFactory import StopWordRemoverFactory, StopWordRemover
from Sastrawi.Stemmer.StemmerFactory import StemmerFactory
from nltk.tokenize import word_tokenize
import re
#Membuat fungsi pembersihan teks
sastrawi = StopWordRemoverFactory()
kata_tambahan = ['Rp', 'dari', 'dan', 'di', 'yang', 'Ini', 'dengan', 'rp']
stopworda = sastrawi.get_stop_words() + kata_tambahan
factory = StemmerFactory()
stemmer = factory.create_stemmer()
def bersihin_teks(text):
text = text.lower()
text = stemmer.stem(text)
text = ' '.join(word for word in text.split() if word not in stopworda)
return text
#Menerapkan fungsi pada teks judul
berita_kompas['Judul_Bersih'] = berita_kompas['Judul_Berita'].apply(bersihin_teks)
berita_kompas
Judul_Berita | Tanggal_Berita | Link_Berita | Judul_Bersih | |
---|---|---|---|---|
0 | Cara ke Pameran Artefak Nabi Muhammad Naik KRL... | 04/04/2023, 10:15 WIB | https://travel.kompas.com/read/2023/04/04/1015... | cara pamer artefak nabi muhammad naik krl tran... |
1 | Viral, Video TKW Hong Kong Dikenai Denda Rp 9 ... | 04/04/2023, 10:15 WIB | https://www.kompas.com/tren/read/2023/04/04/10... | viral video tkw hong kong kena denda 9 juta be... |
2 | Disayangkan, Lokomotif Tua dari Kediri dan Pem... | 04/04/2023, 10:13 WIB | https://www.kompas.com/global/read/2023/04/04/... | sayang lokomotif tua diri malang pinjam belanda |
3 | Memilih Parfum Mobil Harus Benar, jika Salah B... | 04/04/2023, 10:12 WIB | https://otomotif.kompas.com/read/2023/04/04/10... | pilih parfum mobil benar salah rusak komponen |
4 | Resep Kue Ulat Sutra, Gurih dengan Penggunaan ... | 04/04/2023, 10:11 WIB | https://www.kompas.com/food/read/2023/04/04/10... | resep kue ulat sutra gurih kaldu bubuk |
5 | Buka Lelang Impor Beras, Bos Bulog: 4 Negara S... | 04/04/2023, 10:09 WIB | https://money.kompas.com/read/2023/04/04/10095... | buka lelang impor beras bos bulog 4 negara tawar |
6 | Mendagri Hadiri Rapat Paripurna Pengesahan Per... | 04/04/2023, 10:09 WIB | https://nasional.kompas.com/read/2023/04/04/10... | mendagri hadir rapat paripurna kesah perppu mi... |
7 | Polda Metro: Unggahan Baju Bekas yang Disebut ... | 04/04/2023, 10:09 WIB | https://megapolitan.kompas.com/read/2023/04/04... | polda metro unggah baju bekas sebut tilap sidi... |
8 | 1 Perampok yang Tewaskan Sopir Taksi "Online" ... | 04/04/2023, 10:08 WIB | https://megapolitan.kompas.com/read/2023/04/04... | 1 rampok tewas sopir taksi online tol jagorawi... |
9 | Meneladani Ekalaya di Era Merdeka Belajar | 04/04/2023, 10:05 WIB | https://www.kompas.com/edu/read/2023/04/04/100... | teladan ekalaya era merdeka ajar |
10 | Alasan Logo Twitter Berubah Jadi Gambar Anjing... | 04/04/2023, 10:05 WIB | https://www.kompas.com/tren/read/2023/04/04/10... | alas logo twitter ubah jadi gambar anjing shib... |
11 | Golkar: PDI-P Sampai Sekarang Masih Ambil Posi... | 04/04/2023, 10:04 WIB | https://nasional.kompas.com/read/2023/04/04/10... | golkar pdi-p sekarang ambil posisi sendiri had... |
12 | Emas Antam Naik Rp 5.000, Simak Rincian Harganya | 04/04/2023, 10:03 WIB | https://money.kompas.com/read/2023/04/04/10030... | emas antam naik 5 000 simak rincian harga |
13 | Seleksi Mandiri UNY 2023, Simak Jadwal dan Sya... | 04/04/2023, 10:03 WIB | https://www.kompas.com/edu/read/2023/04/04/100... | seleksi mandiri uny 2023 simak jadwal syarat |
14 | Indonesia Dapat Hibah 15 Rantis Bushmaster dar... | 04/04/2023, 10:02 WIB | https://nasional.kompas.com/read/2023/04/04/10... | indonesia hibah 15 rantis bushmaster australia |
#Visualisasi wordcloud judul bersih
text = " ".join(i for i in berita_kompas.Judul_Bersih)
stopwords = set(STOPWORDS)
wordcloud = WordCloud(stopwords = stopwords, background_color = "white").generate(text)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation = "bilinear")
plt.axis("off")
plt.show()
Berdasarkan hasil awan kata di atas, terlihat bahwa kata paling banyak digunakan dalam judul berita kompas.com Bulan April 2023 ini adalah "hadir", "naik", "milu","simak", "cara", "pamer", serta "artefak" dan "muhammad". Kata-kata tersebut agaknya berasosiasi kuat dengan topik yang saat ini sedang trending, misalnya pameran artefak Nabi Muhammad, Impor Beras, Pengesahan Perppu Pemilu 2024, Harga Emas, dan SIMAK Universitas Indonesia (UI).
Demikian sedikit sharing kita kali ini. Ikuti terus artikel terbaru, unik, dan menarik dari blog sederhana ini. Selamat membaca dan mempraktikkan!