Skip to content

Nimitzzzz/Web-Scraping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 

Repository files navigation

Web-Scraping S&P500

23.83.0970

23TK01

Andi Ahmad Fauzan



Import

import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# requests digunakan untuk mengirim permintaan HTTP ke situs web
# BeautifulSoup digunakan untuk mem-parsing HTML dari sius web yang di-scrape
# pandas untuk memanipulasi data dan pengelolaan data dalam format tabel
# matplotlib.pyplot untuk membuat visualisasi data
# Library visualisasi data berbasis matplotlib dengan desain yang lebih menarik

url

url = "https://stockanalysis.com/list/sp-500-stocks/"

# Url sari halaman web yang berisi daftar saham S&P500 yang akan di-scrape

Fungsi untuk melakukan scraping data

def scrape_sp500_data(url):

# Mendefinisikan fungsi scrape_sp500_data untuk mengambil data dari URL yang diberikan.

Session dan Request

    try:
       with requests.Session() as session:
          response = session.get(url)
          response.raise_for_status()
          soup = BeautifulSoup(response.text, 'html.parser')

# Membuka sesi HTTP dengan requests.Session.
# Mengambil konten halaman dengan session.get(url).
# Memastikan permintaan berhasil dengan response.raise_for_status().
# Mem-parsing HTML halaman menggunakan BeautifulSoup.

Mencari Tabel

      table = soup.select_one('table')
      if not table:
          raise ValueError("Tabel data tidak ditemukan di halaman.")

# Mencari elemen tabel dalam HTML dengan select_one.
# Jika tabel tidak ditemukan, muncul pesan error.

Mengambil Header dan Data

      headers = [th.text.strip() for th in table.select('thead th')]
      rows = table.select('tbody tr')
      data = [[col.text.strip() for col in row.select('td')] for row in rows]

# headers Mengambil teks dari elemen thead th (header tabel).
# rows Mengambil semua baris data (tr) dari tbody.
# data Menyusun setiap kolom dalam baris ke dalam list dua dimensi.

Membuat DataFrame

        df = pd.DataFrame(data, columns=headers)
        df = df.rename(columns={
            'Symbol': 'Tickers',
            'Company Name': 'Company',
            'Market Cap': 'MCap',
            'Stock Price': 'Price',
            '% Change': '24h Change %',
        })
# Membuat DataFrame menggunakan pandas.
# Mengganti nama kolom untuk lebih mudah dipahami dan digunakan.

Filter dan Konversi Data

        df = df[['Tickers', 'Company', 'MCap', 'Price', '24h Change %']].copy()
        df['Price'] = pd.to_numeric(df['Price'], errors='coerce')
        df['24h Change %'] = pd.to_numeric(df['24h Change %'].str.replace('%', ''), errors='coerce')
        df['MCap'] = df['MCap'].str.replace('[^\d]', '', regex=True).astype(float)

# Memilih kolom penting untuk analisis.
# Mengubah tipe data kolom Price dan 24h Change % menjadi numerik.
# Membersihkan kolom MCap dengan menghapus karakter non-numerik dan mengonversi menjadi tipe float.

Menambahkan rentang harga

        bins = [0, 50, 100, 200, 500, 1000, float('inf')]
        labels = ['<50', '50-100', '100-200', '200-500', '500-1000', '>1000']
        df['Price Range'] = pd.cut(df['Price'], bins=bins, labels=labels)

# Menambahkan kategori rentang harga berdasarkan nilai Price.
# bins Batas rentang harga.
# labels Label untuk setiap rentang.

Visualisasi data menggunakan Bar Plot

def visualize_data(df):
    top_companies = df.nlargest(10, 'MCap')
    plt.figure(figsize=(14, 6))
    sns.barplot(x='MCap', y='Company', data=top_companies, palette='viridis')
    plt.title("Top 10 Companies by Market Cap")
    plt.xlabel("Market Cap (in trillions)")
    plt.ylabel("Company")
    plt.show()

    price_range_counts = df['Price Range'].value_counts().sort_index()
    plt.figure(figsize=(10, 6))
    sns.barplot(x=price_range_counts.index, y=price_range_counts.values, palette='muted')
    plt.title("Distribution of Companies by Price Range")
    plt.xlabel("Price Range (USD)")
    plt.ylabel("Number of Companies")
    plt.show()

# Fungsi untuk visualisasi data:
# nlargest Memilih 10 perusahaan dengan kapitalisasi pasar terbesar.
# Membuat bar plot menggunakan seaborn.barplot.
# Menambahkan judul dan memformat sumbu.

Melakukan perintah print untuk scraping & visualisasi data

sp500_data = scrape_sp500_data(url)
if sp500_data is not None:
    print("Scraped Data (Sample):")
    print(sp500_data.head())

# Memanggil fungsi scrape_sp500_data dan menampilkan contoh data jika berhasil.

Save ke CSV

    csv_file = "S&P500.csv"
    sp500_data.to_csv(csv_file, index=False)
    print(f"Data saved to {csv_file}")

#Menyimpan data ke file CSV dengan nama S&P500.csv.

Error handling

else:
    print("Gagal mendapatkan data.")


# Menampilkan pesan jika data gagal diambil.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages