Cara mengikis data keuangan Google dengan Python

Komentar: 0

Investor dan analis saat ini menggunakan informasi Google Finance karena informasi tersebut terkini dan akurat. Google Finance tampaknya menjadi tempat yang paling disukai untuk mendapatkan data keuangan terkini dari semua jenis, terutama untuk saham bersama dengan indeks dan tren pasar karena memberikan lebih banyak detail tentang metrik keuangan perusahaan. Python adalah bahasa terbaik untuk web scraping. Postingan ini akan membantu Anda mempelajari cara mengumpulkan data dari Google Finance sehingga Anda dapat memiliki semua alat analisis keuangan yang diperlukan.

Menginstal pustaka yang diperlukan

Sebelum memulai, pastikan Anda telah menginstal Python di sistem Anda. Anda juga akan membutuhkan pustaka: request untuk membuat permintaan HTTP dan lxml untuk mengurai konten HTML halaman web. Untuk menginstal pustaka yang diperlukan, gunakan perintah berikut pada baris perintah:

pip install requests
pip install lxml

Selanjutnya, kita akan menjelajahi proses langkah demi langkah untuk mengekstrak data dari Google Finance:

Langkah 1: Memahami Struktur HTML

Untuk

  • Judul: terletak di //div[@class="zzDege"]/text()
  • Harga: ditemukan di //div[@class="YMlKec fxKbKc"]/text()
  • Tanggal: berlokasi di //div[@class="ygUjEc"]/text()

Ekspresi XPath ini akan menjadi panduan kita untuk menavigasi dan mengekstrak data yang relevan dari struktur HTML halaman Google Finance.

Judul:

1.png

Harga:

2.png

Tanggal:

3.png

Langkah 2: Menyiapkan fungsi pengikis

Saat menyiapkan scraper, sangat penting untuk fokus pada beberapa aspek penting untuk memastikan pengumpulan data yang efisien dan aman.

Membuat permintaan HTTP

Untuk mengambil konten HTML dari situs web Google Finance, kita akan menggunakan pustaka permintaan. Langkah ini memulai proses dengan memuat halaman web yang ingin kita ambil datanya.

Pentingnya menggunakan header yang benar dalam melakukan scraping

Sangat penting untuk menggunakan header yang tepat saat melakukan web scraping, terutama header User-Agent. Penggunaan header sangat penting dalam mensimulasikan permintaan browser asli yang akan mencegah situs mengidentifikasi dan menghentikan skrip otomatis Anda. Header memastikan bahwa server merespons dengan benar dengan memberikan informasi yang relevan tentang permintaan tersebut. Jika tidak ada header yang tepat, permintaan dapat ditolak atau server dapat mengembalikan konten yang sama sekali berbeda atau mengirimkan konten dalam porsi yang dapat membatasi aktivitas web scraping. Oleh karena itu, mengatur header dengan tepat membantu dalam mempertahankan akses ke situs web dan memastikan scraper mengambil data yang benar.

import requests

# Tentukan tajuk untuk meniru kunjungan peramban dan menghindari pemblokiran oleh server
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',  # Jangan Lacak header permintaan
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not/A)Brand";v="8.0.0.0", "Chromium";v="126.0.6478.114", "Google Chrome";v="126.0.6478.114"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}

# Tentukan URL halaman Google Finance untuk BNP Paribas (ticker BNP) di bursa Euronext Paris (EPA)
url = "https://www.google.com/finance/quote/BNP:EPA?hl=en"

# Buat permintaan HTTP GET ke URL dengan header yang ditentukan
response = requests.get(url, headers=headers)

Pentingnya menggunakan proxy

Saat mengikis Google Finance atau situs web apa pun dalam skala besar, sangat penting untuk menggunakan proxy. Berikut alasannya:

  • Hindari larangan IP: situs web seperti Google Finance sering kali memblokir atau membatasi akses dari alamat IP yang membuat terlalu banyak permintaan dalam waktu singkat. Proksi membantu mendistribusikan permintaan ke beberapa alamat IP, sehingga mengurangi kemungkinan terdeteksi dan diblokir.
  • Privasi yang lebih baik: menggunakan proksi menambahkan lapisan anonimitas, melindungi identitas dan niat Anda saat mengorek data.
# Menentukan pengaturan proxy
proxies = {
    'http': 'http://your_proxy_address:port',
    'https': 'https://your_proxy_address:port',
}

# Buat permintaan HTTP GET ke URL dengan header dan proxy yang ditentukan
response = requests.get(url, headers=headers, proxies=proxies)

Mengurai HTML dengan lxml

Setelah kita mendapatkan konten HTML, kita perlu menguraikannya menggunakan pustaka lxml. Hal ini akan memungkinkan kita untuk menavigasi struktur HTML dan mengekstrak data yang kita butuhkan:

Fungsi fromstring dari lxml.html diimpor untuk mem-parsing konten HTML menjadi sebuah objek Element. Metode fromstring mem-parsing response.text, HTML mentah dari halaman web yang diambil sebelumnya, dan mengembalikan objek Element yang disimpan dalam variabel parser, yang merepresentasikan akar dari pohon HTML yang diurai.

from lxml.html import fromstring

# Mengurai konten HTML dari respons menggunakan metode fromstring dari lxml
parser = fromstring(response.text)

Mengekstrak data dengan XPath

Sekarang, mari kita mengekstrak data tertentu menggunakan ekspresi XPath dari pohon HTML yang telah diurai:

Judul mengambil judul instrumen keuangan dari HTML yang diuraikan. Harga mengambil harga saham saat ini. Tanggal mengambil tanggal. Kamus finance_data berisi judul, harga, dan tanggal yang diekstrak. Kamus ini ditambahkan ke dalam sebuah daftar.

# Daftar untuk menyimpan data keluaran
finance_data_list = []

# Mengekstrak judul instrumen keuangan
title = parser.xpath('//div[@class="zzDege"]/text()')[0]

# Mengekstrak harga saham saat ini
price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]

# Mengekstrak tanggal
date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]

# Membuat kamus untuk menyimpan data yang diekstrak
finance_data = {
    'title': title,
    'price': price,
    'date': date
}
# menambahkan data ke daftar_data_keuangan
finance_data_list.append(finance_data)

Penanganan dan penyimpanan data

Untuk menangani data yang dikikis, Anda mungkin ingin memprosesnya lebih lanjut atau menyimpannya dalam format terstruktur seperti JSON:

Variabel output_file menentukan nama file JSON di mana data akan disimpan (finance_data.json). Open(output_file, 'w') membuka file dalam mode tulis, dan json.dump(finance_data_list, f, indent=4) menulis finance_data_list ke dalam file dengan indentasi 4 spasi agar mudah dibaca.

# Menyimpan daftar_data_keuangan ke file JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
    json.dump(finance_data_list, f, indent=4)

Menangani pengecualian permintaan

Saat mengikis data dari situs web, penting untuk menangani pengecualian permintaan untuk memastikan keandalan dan ketangguhan skrip pengikisan Anda. Permintaan ini dapat gagal karena berbagai alasan seperti masalah jaringan, kesalahan server, atau waktu habis. Pustaka permintaan di Python menyediakan cara untuk menangani jenis pengecualian ini secara efektif seperti yang ditunjukkan di bawah ini:

try:
    # Mengirim permintaan GET ke URL
    response = requests.get(url)

    # Naikkan HTTPError untuk respons yang buruk (kode status 4xx atau 5xx)
    response.raise_for_status()

except requests.exceptions.HTTPError as e:
    # Menangani kesalahan HTTP (seperti 404, 500, dll.)
    print(f"HTTP error occurred: {e}")

except requests.exceptions.RequestException as e:
    # Menangani pengecualian lain yang mungkin terjadi selama permintaan
    print(f"An error occurred: {e}")

Blok coba membungkus kode yang mungkin menimbulkan pengecualian. Requests.get(url) mengirimkan permintaan GET. Response.raise_for_status() memeriksa kode status respons dan memunculkan HTTPError untuk kode yang gagal. Kecuali request.exceptions.HTTPError sebagai e: menangkap pengecualian HTTPError dan mencetak pesan kesalahan. Kecuali requests.exceptions.RequestException sebagai e: menangkap pengecualian lain (misalnya, kesalahan jaringan, batas waktu) dan mencetak pesan kesalahan.

Kode lengkap

Sekarang, mari kita integrasikan semuanya untuk membuat fungsi scraper yang mengambil, mengurai, dan mengekstrak data dari beberapa URL Google Finance:

import requests
from lxml.html import fromstring
import json
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Daftar URL yang akan dikikis
urls = [
    "https://www.google.com/finance/quote/BNP:EPA?hl=en",
    "https://www.google.com/finance/quote/SPY:NYSEARCA?hl=en",
    "https://www.google.com/finance/quote/SENSEX:INDEXBOM?hl=en"
]

# Tentukan tajuk untuk meniru kunjungan browser
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not/A)Brand";v="8.0.0.0", "Chromium";v="126.0.6478.114", "Google Chrome";v="126.0.6478.114"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}

# Tentukan titik akhir proxy
proxies = {
    'http': 'http://your_proxy_address:port',
    'https': 'https://your_proxy_address:port',
}

# Daftar untuk menyimpan data yang dikikis
finance_data_list = []

# Lakukan perulangan pada setiap URL dan kikis data
for url in urls:
    try:
        # Mengirim permintaan GET ke URL
        response = requests.get(url, headers=headers, proxies=proxies, verify=False)
        
        # Naikkan HTTPError untuk respons yang buruk (kode status 4xx atau 5xx)
        response.raise_for_status()
        
        # Mengurai konten HTML dari respons menggunakan metode fromstring dari lxml
        parser = fromstring(response.text)
        
        # Mengekstrak judul, harga, dan tanggal
        title = parser.xpath('//div[@class="zzDege"]/text()')[0]
        price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]
        date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]
        
        # Menyimpan data yang diekstrak dalam kamus
        finance_data = {
            'title': title,
            'price': price,
            'date': date
        }
        
        # Tambahkan kamus ke dalam daftar
        finance_data_list.append(finance_data)
    
    except requests.exceptions.HTTPError as e:
        # Menangani kesalahan HTTP (seperti 404, 500, dll.)
        print(f"HTTP error occurred for URL {url}: {e}")
    except requests.exceptions.RequestException as e:
        # Menangani pengecualian lain yang mungkin terjadi selama permintaan
        print(f"An error occurred for URL {url}: {e}")

# Menyimpan daftar_data_keuangan ke file JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
    json.dump(finance_data_list, f, indent=4)

print(f"Scraped data saved to {output_file}")

Keluaran:

4.png

Panduan ini menawarkan tutorial komprehensif tentang mengikis data dari Google Finance menggunakan Python, di samping pustaka yang kuat seperti `lxml` dan `request`. Panduan ini memberikan dasar untuk membuat alat canggih untuk mengorek data keuangan, yang dapat digunakan untuk melakukan analisis pasar yang mendalam, memantau aktivitas pesaing, atau mendukung keputusan investasi yang tepat.

Komentar:

0 komentar