-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
82 lines (65 loc) · 2.58 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 11 07:55:32 2024
@author: Habib
"""
import requests
from bs4 import BeautifulSoup
import pandas as pd
from datetime import datetime, timedelta
import re
# Fungsi untuk mengubah format relatif menjadi tanggal absolut
def convert_relative_date(relative_str):
# Ambil tanggal hari ini
today = datetime.now()
# Cari pola waktu (bulan, hari, jam, menit)
months = re.search(r"(\d+) Bulan", relative_str)
days = re.search(r"(\d+) Hari", relative_str)
hours = re.search(r"(\d+) Jam", relative_str)
minutes = re.search(r"(\d+) Menit", relative_str)
# Hitung selisih waktu
delta = timedelta()
if months:
delta += timedelta(days=int(months.group(1)) * 30) # Asumsikan 1 bulan = 30 hari
if days:
delta += timedelta(days=int(days.group(1)))
if hours:
delta += timedelta(hours=int(hours.group(1)))
if minutes:
delta += timedelta(minutes=int(minutes.group(1)))
# Kurangi tanggal hari ini dengan selisih waktu yang ditemukan
final_date = today - delta
# Kembalikan dalam format yyyy-mm-dd
return final_date.strftime('%Y-%m-%d')
# Base URL untuk scraping, halaman akan bervariasi berdasarkan per_page
base_url = "https://www.kontan.co.id/search/?search=ihsg-&per_page={}"
# List untuk menyimpan headline dan tanggal
headlines = []
dates = []
# Looping dari per_page=20 hingga per_page=400 dengan kelipatan 20
for page in range(20, 601, 20):
# Format URL dengan parameter per_page yang sesuai
url = base_url.format(page)
# Mengirim permintaan ke URL dan mendapatkan halaman HTML
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
# Mengambil headline dari <div class="sp-hl"> -> <h1> -> <a>
for article in soup.find_all("li"):
headline = article.find("h1")
date_span = article.find("span", class_="font-gray")
if headline and date_span:
# Simpan headline
headlines.append(headline.text.strip())
# Simpan tanggal (konversi dari waktu relatif ke yyyy-mm-dd)
relative_date = date_span.text.strip()
converted_date = convert_relative_date(relative_date)
dates.append(converted_date)
# Membuat DataFrame dari headline dan tanggal
df = pd.DataFrame({
"Headline": headlines,
"Date": dates
})
# Menampilkan hasil DataFrame
print(df)
# Simpan DataFrame ke file CSV (opsional)
df.to_csv('headline_ihsg.csv', index=False)