Beranda BlogPengikisan web Scraping Web Berita Google menggunakan Python: Panduan Langkah-demi-Langkah

Scraping Web Berita Google menggunakan Python: Panduan Langkah-demi-Langkah

oleh Kadek

Temukan cara memanfaatkan Google News dan Python untuk berbagai aplikasi canggih dengan panduan komprehensif kami. Baik untuk riset pasar, analisis sentimen, atau manajemen krisis, teknik yang mudah diimplementasikan ini dapat membantu mengubah pendekatan Anda dalam mengumpulkan berita.

Kami akan memberikan petunjuk terperinci tentang cara menggunakan Google SERP API dan pustaka pengikisan web seperti Beautiful Soup dan Selenium untuk mengumpulkan informasi secara otomatis. Metode-metode ini memungkinkan Anda menjelajahi kasus penggunaan yang lebih canggih di luar mengejar berita utama hari ini. Temukan cara yang lebih mudah untuk berinteraksi dengan berita hari ini!

Scraping Berita Google menggunakan API

Ada dua cara untuk mengekstrak berita dari hasil pencarian Google: menggunakan pustaka Python untuk web scraping, atau menggunakan Google News API. Opsi API adalah pilihan yang tepat untuk pemula dan siapa saja yang ingin menghindari kerumitan berurusan dengan pemblokiran, captcha, dan rotasi proxy.

Google News API memberi Anda data dalam format JSON, yang mudah diproses dan digunakan. Mari kita lihat cara mengikis berita utama dan deskripsi berita Google menggunakan Google News API, apa yang Anda perlukan, dan cara menyimpan data yang diperoleh di Excel.

Daftar dan Dapatkan kunci API

Untuk menggunakan API, Anda memerlukan kunci API. Untuk mendapatkannya, kunjungi situs web Scrape-It.Cloud dan daftar. 


Dasbor

Buka tab Dasbor di akun Anda dan salin kunci API pribadi Anda. Kami akan membutuhkannya nanti.

Mengatur Parameter

Pertama, mari kita instal pustaka yang diperlukan. Untuk melakukannya, tentukan yang berikut ini pada prompt perintah:

pip install requests
pip install pandas

Library Requests adalah library permintaan yang memungkinkan kita untuk meminta API untuk mendapatkan data yang diperlukan. Dan library Pandas diperlukan untuk memproses data dan kemudian menyimpannya sebagai file Excel. 

Setelah pustaka terinstal, buatlah sebuah file dengan ekstensi *.py dan imporlah.

import requests
import pandas as pd

Sekarang mari kita atur parameter yang dapat dimasukkan ke dalam variabel. Hanya ada dua di antaranya: referensi ke titik akhir API dan kata kunci.

keyword = 'new york good news'
api_url="https://api.scrape-it.cloud/scrape/google"

Hal terakhir yang harus diatur adalah header dan isi permintaan. Header hanya berisi satu parameter - kunci API. Namun, badan permintaan dapat berisi banyak parameter, termasuk parameter pelokalan. Daftar lengkap parameter dapat ditemukan di dokumentasi kami. 

Dalam contoh ini, kita hanya akan menggunakan parameter yang diperlukan:

headers = {'x-api-key': 'YOUR-API-KEY'}

params = {
    'q': keyword,
    'domain': 'google.com',
    'tbm': 'nws'
}

Kami telah menentukan kata kunci, domain, dan jenis. Parameter lainnya dapat dibiarkan tidak ditentukan, tetapi dapat digunakan untuk menyempurnakan kueri dan mendapatkan hasil yang lebih spesifik.

Buat Permintaan

Setelah semua parameter yang diperlukan ditentukan, jalankan permintaan:

response = requests.get(api_url, params=params, headers=headers)

Google News API Scrape-It.Cloud menggunakan permintaan GET dan memberikan respons JSON dalam format berikut:

{
  "requestMetadata": {
    "id": "57239e2b-02a2-4bfb-878d-9c36f5c21798",
    "googleUrl": "https://www.google.com/search?q=Coffee&uule=w+CAIQICIaQXVzdGluLFRleGFzLFVuaXRlZCBTdGF0ZXM%3D&gl=us&hl=en&filter=1&tbm=nws&oq=Coffee&sourceid=chrome&num=10&ie=UTF-8",
    "googleHtmlFile": "https://storage.googleapis.com/scrapeit-cloud-screenshots/57239e2b-02a2-4bfb-878d-9c36f5c21798.html",
    "status": "ok"
  },
  "pagination": {
   "next": "https://www.google.com/search?q=Coffee&gl=us&hl=en&tbm=nws&ei=sim9ZPe7Noit5NoP3_efgAU&start=10&sa=N&ved=2ahUKEwj33Jes9qSAAxWIFlkFHd_7B1AQ8NMDegQIAhAW",
    "current": 1,
    "pages": [
      {
       "2": "https://www.google.com/search?q=Coffee&gl=us&hl=en&tbm=nws&ei=sim9ZPe7Noit5NoP3_efgAU&start=10&sa=N&ved=2ahUKEwj33Jes9qSAAxWIFlkFHd_7B1AQ8tMDegQIAhAE"
      },
      // ... More pages ...
    ]
  },
  "searchInformation": {
    "totalResults": "37600000",
    "timeTaken": 0.47
  },
  "newsResults": [
    {
      "position": 1,
      "title": "De'Longhi's TrueBrew Coffee Maker Boasts Simplicity, but the Joe Is Just So-So",
      "link": "https://www.wired.com/review/delonghi-truebrew-drip-coffee-maker/",
      "source": "WIRED",
      "snippet": "The expensive coffee maker with Brad Pitt as its spokesmodel is better than a capsule-based machine but not as good as competing single-cup...",
      "date": "1 day ago"
    },
    // ... More news results ...
  ]
}

Anda dapat menampilkan data yang diperoleh pada layar atau melanjutkan mengerjakannya.

Mengurai Data

Untuk memproses data lebih lanjut, kita perlu menguraikannya. Untuk tujuan ini, kita secara eksplisit menentukan bahwa data disimpan dalam format JSON:

data = response.json()

Sekarang kita dapat menggunakan nama atribut untuk mengambil data tertentu:

news = data['newsResults']

Dengan demikian, kami telah memasukkan semua berita ke dalam variabel berita.

Menyimpan Data yang Dikumpulkan

Untuk menyimpan data yang diperoleh sebagai file Excel, kita menggunakan Pandas. Dengan menggunakan pustaka ini, kita dapat membuat bingkai data atau kumpulan data yang terorganisir sebagai tabel dari respons JSON.

df = pd.DataFrame(news)

Judulnya akan identik dengan nama atribut. Sekarang mari kita simpan dataframe ke sebuah file:

df.to_excel("news_result.xlsx", index=False)

Hasilnya adalah tabel seperti ini:


File Excel

Untuk membuat kode lebih andal, mari tambahkan blok try..except dan periksa respons yang berhasil. Kode yang dihasilkan:

import requests
import pandas as pd

keyword = 'new york good news'
api_url="https://api.scrape-it.cloud/scrape/google"
headers = {'x-api-key': 'YOUR-API-KEY'}
params = {
    'q': keyword,
    'domain': 'google.com',
    'tbm': 'nws'
}

try:
    response = requests.get(api_url, params=params, headers=headers)
    if response.status_code == 200:
        data = response.json()
        news = data['newsResults']
        df = pd.DataFrame(news)
        df.to_excel("news_result.xlsx", index=False)
except Exception as e:
    print('Error:', e)

Dengan demikian, kami mendapatkan data tanpa perlu memproses halaman HTML, menggunakan proxy, atau mencari cara untuk menerobos pemblokiran dan captcha.

Mengikis Hasil Berita Google menggunakan Selenium

Opsi berikutnya untuk mengikis Google News adalah dengan menggunakan pustaka Python. Dalam hal ini, ada baiknya menggunakan peramban tanpa kepala untuk meniru perilaku pengguna asli untuk mengurangi risiko pemblokiran.

Kita akan menggunakan Selenium untuk membuat Google News Scraper karena Selenium dapat digunakan dengan berbagai bahasa pemrograman dan mendukung beberapa web driver. Dalam tutorial ini, kita akan menggunakan driver web Chrome.

Instal Perpustakaan dan Unduh Webdriver

Untuk menginstal Selenium, ketik pada prompt perintah:

pip install selenium

Kemudian buka situs web webdriver Chrome dan unduh versi yang Anda perlukan (harus sesuai dengan versi Google Chrome yang telah Anda instal).

Meneliti Struktur Halaman Berita Google

Sebelum menulis kode, lihatlah halaman Google News dan teliti bagian-bagian yang akan kita kikis. Hal pertama yang harus dilihat adalah tautan ke halaman Google News. Mari kita lihat seperti apa tampilannya.


Tautan Berita Google

Seperti yang bisa kita lihat, kita bisa dengan mudah membuat tautan scraping dengan mengganti "new york good news" dengan kueri lainnya.

Sekarang mari kita pergi ke alat pengembang (F12 atau klik kanan pada layar dan Inspect) dan lihat salah satu hasilnya secara lebih rinci.


Item

Semua berita memiliki tag div dengan id="rso". Kita dapat menggunakan ini dan struktur halaman HTML untuk mendapatkan data yang dibutuhkan. Untuk mendapatkan elemen-elemen itu sendiri, kita dapat menggunakan pemilih "div#rso > div > div > div > div > div" yang mendapatkan data dalam tag div.

Pada situasi lain, kita akan mendapatkan data dari elemen-elemen dengan menggunakan kelas. Ini bisa berupa kelas "SoaBEf", yang umum untuk semua elemen. Namun, nama kelas di Google News sering berubah dan tidak konstan. Oleh karena itu, mari kita andalkan struktur dan elemen yang tidak akan berubah.


Tags

Di sini, seperti yang bisa kita lihat, kita bisa mendapatkan data berikut:

  1. Tautan ke berita tersebut.
  2. Nama sumber daya tempat berita diposting.
  3. Judul berita.
  4. Deskripsi berita.
  5. Sudah berapa lama berita tersebut diterbitkan.

Sekarang setelah kita mengetahui data apa yang kita butuhkan, mari kita lanjutkan ke scraping.

Impor Perpustakaan dan Tetapkan Parameter

Buat file baru dengan ekstensi *.py dan korup modul perpustakaan Selenium yang diperlukan:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

Sekarang mari kita atur jalur ke file driver web yang telah diunduh sebelumnya dan tautan ke halaman berita Google yang akan dikikis.

chromedriver_path="C://chromedriver.exe"
url="https://www.google.com/search?q=new+york+good+news&tbm=nws"

Kita juga perlu menentukan parameter webdriver yang akan dijalankan.

service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service)

Ini merupakan akhir dari persiapan, dan Anda dapat melanjutkan ke pengumpulan data.

Buka Google News dan Kikis Data

Yang harus kita lakukan adalah menjalankan kueri dan mengumpulkan data. Untuk melakukan ini, jalankan webdriver:

driver.get(url)

Jika Anda menjalankan skrip sekarang, Anda akan mendapatkan jendela Google Chrome yang akan membuka jendela yang menavigasi ke kueri penelusuran.


Selenium WebDriver

Sekarang, mari kita uraikan konten halaman yang sedang kita kunjungi. Untuk tujuan ini, sebelumnya kita sudah menyelidiki halaman web dan mempelajari strukturnya. Sekarang, mari kita gunakan dan dapatkan semua berita di halaman tersebut:

news_results = driver.find_elements(By.CSS_SELECTOR, 'div#rso > div > div > div > div')

Kemudian kami mengitari setiap elemen satu per satu:

for news_div in news_results:

Pertama, mari kita kumpulkan tautan dan tampilkan di layar:

        news_link = news_div.find_element(By.TAG_NAME, 'a').get_attribute('href')
        print("Link:", news_link)

Kemudian kita mendapatkan elemen yang tersisa:

        divs_inside_news = news_div.find_elements(By.CSS_SELECTOR, 'a > div > div > div')
        news_item = []
        for new in divs_inside_news:
            news_item.append(new.text)

Sekarang, mari kita tampilkan nilai-nilai ini pada layar:

        print("Domain:", news_item[1])
        print("Title:", news_item[2])
        print("Description:", news_item[3])
        print("Date:", news_item[4])

Buatlah pemisah di antara item berita yang berbeda, sehingga terlihat jelas secara visual:

        print("-"*50+"\n\n"+"-"*50)

Dan terakhir, tutup driver web.

driver.quit()

Sekarang, jika kita menjalankan skrip ini, kita akan mendapatkan data di dalam form:


Hasil

Kode lengkap:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

chromedriver_path="C://chromedriver.exe"
service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service)

url="https://www.google.com/search?q=new+york+good+news&tbm=nws"
driver.get(url)

news_results = driver.find_elements(By.CSS_SELECTOR, 'div#rso > div >div>div>div')
for news_div in news_results:
    news_item = []
    try:
        news_link = news_div.find_element(By.TAG_NAME, 'a').get_attribute('href')
        print("Link:", news_link)

        divs_inside_news = news_div.find_elements(By.CSS_SELECTOR, 'a>div>div>div')

        for new in divs_inside_news:
            news_item.append(new.text)
        print("Domain:", news_item[1])
        print("Title:", news_item[2])
        print("Description:", news_item[3])
        print("Date:", news_item[4])
        print("-"*50+"\n\n"+"-"*50)
    except Exception as e:
        print("No Elems")

driver.quit()

Jika Anda ingin menyimpan data dalam format Excel, Anda dapat memasukkannya baris demi baris atau, seperti pada opsi sebelumnya, membuat bingkai data dan menyimpannya sekaligus.

Kesimpulan dan Pelajaran Berharga

Artikel ini membahas dua cara untuk mengikis data Google News menggunakan Python: menggunakan Google News API dan menerapkan metode web scraping menggunakan library Selenium. Google News API menawarkan pendekatan yang sederhana, menyediakan data dalam format JSON yang dapat dengan cepat diproses dan dianalisis. Dengan mendapatkan kunci API dan mengatur parameternya, Anda dapat dengan cepat mengambil informasi berita sesuai dengan permintaan Anda.

Bagi mereka yang membutuhkan lebih banyak kontrol dan fleksibilitas, web scraping dengan Selenium dapat menjadi alternatif. Dengan meniru perilaku dan interaksi pengguna dengan halaman web, Selenium memungkinkan Anda untuk mengekstrak elemen data tertentu. Metode ini tepat digunakan ketika interaksi yang lebih kompleks dengan halaman web diperlukan, seperti mengisi kolom.

Artikel ini menjelaskan proses langkah demi langkah untuk kedua metode tersebut dan memberikan contoh kode yang menunjukkan cara menggunakan setiap metode untuk mengambil data Google News. Dengan mengikuti petunjuk dan cuplikan kode, Anda bisa mendapatkan gambaran yang jelas tentang cara mengumpulkan data berita dari Google News untuk pembelajaran mesin atau kebutuhan analisis dan penelitian Anda.

Posting Terkait

Tinggalkan Komentar