Kursus/Jasa/Bimbingan Skripsi/Tesis/Disertasi Python | Belajar Web Scraping Tweeter Menggunakan Python

Baik, mari kita mulai dengan dasar-dasar web scraping Twitter menggunakan Python. Web scraping adalah proses otomatis untuk mengambil data dari situs web. Untuk Twitter, kita biasanya menggunakan API mereka, tapi untuk tujuan pembelajaran, kita akan membahas dasar-dasar scraping langsung dari situs web menggunakan alat-alat seperti BeautifulSoup dan Selenium.
Langkah-langkah Web Scraping Twitter dengan Python
- Memahami Tujuan dan Keterbatasan:
- Twitter memiliki kebijakan API yang ketat. Menggunakan web scraping langsung dari situs bisa melanggar aturan mereka, jadi selalu pertimbangkan menggunakan Twitter API jika memungkinkan.
- Web scraping bisa dibatasi oleh CAPTCHA dan perubahan layout situs.
- Menyiapkan Lingkungan:
- Python: Versi terbaru
- Pustaka yang diperlukan:
requests,BeautifulSoup, danSelenium - Instal pustaka-pustaka ini dengan pip:
pip install requests beautifulsoup4 selenium
- Menggunakan BeautifulSoup untuk Mengambil Data Statis:
requestsdigunakan untuk mengambil halaman HTML.BeautifulSoupdigunakan untuk memparsing HTML dan mengekstrak data.
- Menggunakan Selenium untuk Data Dinamis:
- Selenium digunakan untuk mengotomatisasi browser, yang berguna untuk situs yang memuat data secara dinamis dengan JavaScript.
Contoh Web Scraping Menggunakan BeautifulSoup
Mari kita mulai dengan contoh sederhana menggunakan requests dan BeautifulSoup untuk mengambil tweet dari halaman tertentu.
import requests
from bs4 import BeautifulSoup
# URL halaman Twitter yang ingin di-scrape
url = 'https://twitter.com/username'
# Mengambil halaman
response = requests.get(url)
# Memparsing halaman HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Mencari elemen tweet
tweets = soup.find_all('div', {'class': 'tweet'})
# Menampilkan tweet
for tweet in tweets:
print(tweet.get_text())
Menggunakan Selenium untuk Data Dinamis
Untuk situs yang memuat konten dengan JavaScript, kita perlu menggunakan Selenium. Selenium mengontrol browser dan bisa digunakan untuk mengambil data setelah halaman dimuat sepenuhnya.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless")
service = Service(executable_path='/path/to/chromedriver')
# Membuka browser dengan Selenium
driver = webdriver.Chrome(service=service, options=chrome_options)
# Mengakses halaman Twitter
driver.get('https://twitter.com/username')
# Menunggu elemen tweet muncul
tweets = driver.find_elements(By.CLASS_NAME, 'tweet')
# Menampilkan tweet
for tweet in tweets:
print(tweet.text)
# Menutup browser
driver.quit()
Penjelasan Analogi
- Requests dan BeautifulSoup: Bayangkan Anda membaca koran fisik. Anda hanya perlu membuka halaman dan melihat teks di depan Anda.
- Selenium: Seperti membuka koran digital di komputer yang memuat lebih banyak konten saat Anda menggulir halaman. Selenium membantu Anda menggulir dan mengambil data yang muncul.
Kita akan masuk ke langkah-langkah lebih mendalam untuk melakukan web scraping Twitter menggunakan Python.
Langkah 1: Menyiapkan Lingkungan
Sebelum memulai, pastikan Anda memiliki Python dan pustaka yang diperlukan. Berikut cara menginstal pustaka:
pip install requests beautifulsoup4 selenium
Langkah 2: Memahami Struktur Halaman Twitter
Untuk melakukan scraping, kita harus memahami bagaimana data disusun di halaman web. Misalnya, setiap tweet di Twitter memiliki elemen HTML tertentu yang kita bisa targetkan.
Langkah 3: Mengambil Data Statis dengan BeautifulSoup
Kita akan mulai dengan mengambil data statis. Ini cocok untuk halaman web yang tidak banyak berubah atau tidak memuat konten secara dinamis.
Contoh Kode:
import requests
from bs4 import BeautifulSoup
# URL halaman Twitter yang ingin di-scrape
url = 'https://twitter.com/username'
# Mengambil halaman
response = requests.get(url)
# Memparsing halaman HTML
soup = BeautifulSoup(response.text, 'html.parser')
# Mencari elemen tweet
tweets = soup.find_all('div', {'data-testid': 'tweet'})
# Menampilkan tweet
for tweet in tweets:
print(tweet.get_text())
Penjelasan:
- requests.get(url): Mengambil konten dari URL yang diberikan.
- BeautifulSoup(response.text, ‘html.parser’): Memparsing konten HTML yang diambil.
- soup.find_all(‘div’, {‘data-testid’: ‘tweet’}): Menemukan semua elemen tweet berdasarkan atribut ‘data-testid’.
Langkah 4: Mengambil Data Dinamis dengan Selenium
Untuk situs yang memuat data dengan JavaScript, seperti Twitter, kita menggunakan Selenium untuk mengotomatisasi browser dan mengambil konten setelah halaman dimuat sepenuhnya.
Contoh Kode:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless")
service = Service(executable_path='/path/to/chromedriver') # Ganti dengan path ke chromedriver Anda
# Membuka browser dengan Selenium
driver = webdriver.Chrome(service=service, options=chrome_options)
# Mengakses halaman Twitter
driver.get('https://twitter.com/username')
# Menunggu elemen tweet muncul
tweets = driver.find_elements(By.CSS_SELECTOR, 'article')
# Menampilkan tweet
for tweet in tweets:
print(tweet.text)
# Menutup browser
driver.quit()
Penjelasan:
- webdriver.Chrome(service=service, options=chrome_options): Membuka browser Chrome dengan konfigurasi headless (tanpa tampilan).
- driver.get(url): Mengakses halaman yang ditentukan.
- driver.find_elements(By.CSS_SELECTOR, ‘article’): Menemukan elemen-elemen tweet berdasarkan selektor CSS.
- driver.quit(): Menutup browser setelah selesai.
Analoginya:
- Requests dan BeautifulSoup: Seperti membuka koran fisik di mana Anda bisa langsung membaca teks yang terlihat.
- Selenium: Seperti membuka koran digital di komputer yang memuat lebih banyak konten saat Anda menggulir halaman. Selenium membantu Anda menggulir dan mengambil data yang muncul.
Langkah 5: Mengelola Data yang Diambil
Setelah Anda mengambil data, langkah berikutnya adalah menyimpannya dalam format yang dapat dianalisis lebih lanjut, misalnya dalam file CSV.
Contoh Kode:
import csv
# Menyimpan data dalam file CSV
with open('tweets.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Tweet"]) # Menulis header
for tweet in tweets:
writer.writerow([tweet.text])
Penjelasan:
- open(‘tweets.csv’, ‘w’, newline=”, encoding=’utf-8′): Membuka (atau membuat) file CSV untuk menulis.
- csv.writer(file): Membuat penulis CSV.
- writer.writerow([“Tweet”]): Menulis baris header.
- writer.writerow([tweet.text]): Menulis setiap tweet ke dalam file.
Kita akan melanjutkan ke bagian yang lebih teknis mengenai web scraping Twitter menggunakan Python. Kita akan memperdalam penggunaan Selenium untuk mengotomatisasi proses scraping dan menangani data dinamis.
Langkah 6: Mengotomatisasi Proses Scraping dengan Selenium
Selenium adalah alat yang sangat kuat untuk mengotomatisasi interaksi dengan browser. Ini memungkinkan kita untuk mengakses situs web yang memuat konten dinamis dan melakukan tindakan seperti menggulir, mengklik, dan mengisi formulir.
Persiapan Selenium
- Download WebDriver: Anda memerlukan WebDriver yang sesuai dengan browser yang Anda gunakan (misalnya, ChromeDriver untuk Google Chrome). Anda dapat mengunduhnya dari situs resmi Selenium atau browser yang bersangkutan.
- Konfigurasi Path: Pastikan executable path dari WebDriver sudah dikonfigurasi dengan benar.
Contoh Kode Menggunakan Selenium
Berikut adalah contoh kode yang lebih lengkap untuk mengambil tweet dari halaman profil Twitter menggunakan Selenium:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
import time
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless") # Jalankan browser tanpa GUI
chrome_options.add_argument("--disable-gpu")
service = Service(executable_path='/path/to/chromedriver') # Ganti dengan path ke chromedriver Anda
# Membuka browser dengan Selenium
driver = webdriver.Chrome(service=service, options=chrome_options)
# Mengakses halaman Twitter
driver.get('https://twitter.com/username')
# Menunggu elemen tweet muncul dan menggulir halaman
SCROLL_PAUSE_TIME = 2
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Menggulung ke bawah halaman
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Tunggu beberapa saat untuk memuat halaman
time.sleep(SCROLL_PAUSE_TIME)
# Menghitung tinggi baru halaman
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# Menemukan elemen-elemen tweet
tweets = driver.find_elements(By.CSS_SELECTOR, 'article')
# Menampilkan tweet
for tweet in tweets:
print(tweet.text)
# Menutup browser
driver.quit()
Penjelasan Mendalam
- Menggulir Halaman:
SCROLL_PAUSE_TIME: Waktu jeda antara setiap guliran untuk memungkinkan halaman memuat konten baru.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);"): Menggulung halaman hingga ke bawah.- Perulangan untuk menggulir hingga tidak ada konten baru yang dimuat.
- Menemukan dan Mengekstrak Tweet:
driver.find_elements(By.CSS_SELECTOR, 'article'): Menemukan semua elemen yang mengandung tweet berdasarkan selektor CSS.tweet.text: Mengambil teks dari setiap tweet yang ditemukan.
Penyimpanan Data
Setelah mendapatkan data, kita perlu menyimpannya untuk analisis lebih lanjut. Berikut adalah cara untuk menyimpan data dalam file CSV menggunakan Python:
Contoh Kode:
import csv
# Menyimpan data dalam file CSV
with open('tweets.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Tweet"]) # Menulis header
for tweet in tweets:
writer.writerow([tweet.text])
Penjelasan:
- Membuka File CSV:
open('tweets.csv', 'w', newline='', encoding='utf-8'): Membuka (atau membuat) file CSV untuk menulis. Menggunakannewline=''untuk menghindari baris kosong ganda.
- Menulis Header dan Data:
writer.writerow(["Tweet"]): Menulis baris header untuk kolom tweet.writer.writerow([tweet.text]): Menulis setiap tweet ke dalam file CSV.
Contoh Lengkap
Berikut adalah contoh lengkap dari seluruh proses scraping, dari mengakses halaman hingga menyimpan data:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
import time
import csv
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless") # Jalankan browser tanpa GUI
chrome_options.add_argument("--disable-gpu")
service = Service(executable_path='/path/to/chromedriver') # Ganti dengan path ke chromedriver Anda
# Membuka browser dengan Selenium
driver = webdriver.Chrome(service=service, options=chrome_options)
# Mengakses halaman Twitter
driver.get('https://twitter.com/username')
# Menunggu elemen tweet muncul dan menggulir halaman
SCROLL_PAUSE_TIME = 2
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Menggulung ke bawah halaman
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Tunggu beberapa saat untuk memuat halaman
time.sleep(SCROLL_PAUSE_TIME)
# Menghitung tinggi baru halaman
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# Menemukan elemen-elemen tweet
tweets = driver.find_elements(By.CSS_SELECTOR, 'article')
# Menyimpan data dalam file CSV
with open('tweets.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Tweet"]) # Menulis header
for tweet in tweets:
writer.writerow([tweet.text])
# Menutup browser
driver.quit()
Menangani Potensi Masalah
- CAPTCHA dan Pembatasan: Twitter mungkin meminta CAPTCHA jika mereka mendeteksi aktivitas mencurigakan. Ini bisa menjadi batasan utama untuk web scraping.
- Perubahan Struktur Halaman: Struktur HTML Twitter bisa berubah, sehingga selektor CSS yang digunakan perlu diperbarui.
mari kita lanjutkan dengan beberapa aspek lanjutan dari web scraping, serta beberapa praktik terbaik dan penanganan masalah umum yang mungkin Anda hadapi saat melakukan scraping di Twitter atau situs web lainnya.
Langkah 7: Penanganan Potensi Masalah dan Praktik Terbaik
1. Mengatasi CAPTCHA dan Pembatasan
Twitter dan banyak situs web lainnya menggunakan CAPTCHA untuk mencegah scraping otomatis. Ada beberapa cara untuk mengatasi ini, meskipun tidak ada solusi yang sempurna:
- Human Intervention: Ketika CAPTCHA muncul, intervensi manual mungkin diperlukan untuk menyelesaikannya.
- Rotasi IP: Menggunakan layanan proxy untuk merotasi IP address bisa membantu menghindari pembatasan. Layanan seperti ProxyMesh atau ScraperAPI bisa membantu.
- Headless Browsing dengan Randomized Delays: Menggunakan Selenium dengan waktu jeda acak antara tindakan untuk meniru perilaku manusia.
2. Penanganan Perubahan Struktur Halaman
Struktur HTML situs web bisa berubah sewaktu-waktu. Untuk mengatasinya:
- Monitor Perubahan: Secara berkala memeriksa halaman untuk memastikan selektor CSS masih valid.
- XPath vs. CSS Selectors: XPath lebih fleksibel dalam beberapa kasus dan bisa digunakan sebagai alternatif selektor CSS.
3. Rate Limiting
Banyak situs menerapkan rate limiting untuk membatasi jumlah permintaan dalam periode tertentu. Praktik terbaik:
- Mengatur Batas Permintaan: Mengatur kecepatan scraping untuk menghindari batasan ini.
- Menangani Respon 429 (Too Many Requests): Menambahkan mekanisme penanganan untuk mencoba ulang permintaan setelah jeda waktu.
4. Etika Scraping
- Baca dan Patuhi TOS (Terms of Service): Pastikan Anda memahami dan mematuhi kebijakan situs web.
- Gunakan API Resmi Jika Tersedia: Twitter memiliki API resmi yang dirancang untuk digunakan pengembang, yang lebih stabil dan mendukung penggunaan yang lebih luas.
Penanganan Masalah Umum
1. Error 403 (Forbidden) atau 404 (Not Found)
- Penyebab: URL yang salah atau akses yang dibatasi.
- Solusi: Periksa URL yang Anda coba akses, pastikan benar dan bisa diakses secara publik.
2. Timeouts
- Penyebab: Situs yang lambat atau koneksi jaringan yang buruk.
- Solusi: Mengatur waktu tunggu yang lebih lama dalam permintaan HTTP atau Selenium.
3. Data Incomplete atau Tidak Valid
- Penyebab: Struktur HTML berubah atau data tidak dimuat sepenuhnya.
- Solusi: Periksa struktur HTML terbaru dan gunakan Selenium untuk menangani pemuatan data dinamis.
Studi Kasus: Scraping Tweets berdasarkan Hashtag
Sekarang kita akan melihat contoh bagaimana scraping tweets berdasarkan hashtag menggunakan Selenium.
Contoh Kode untuk Scraping Tweets berdasarkan Hashtag
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
import csv
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless") # Jalankan browser tanpa GUI
chrome_options.add_argument("--disable-gpu")
service = Service(executable_path='/path/to/chromedriver') # Ganti dengan path ke chromedriver Anda
# Membuka browser dengan Selenium
driver = webdriver.Chrome(service=service, options=chrome_options)
# URL pencarian Twitter berdasarkan hashtag
hashtag = 'yourHashtag' # Ganti dengan hashtag yang Anda inginkan
url = f'https://twitter.com/search?q=%23{hashtag}&src=typed_query'
# Mengakses halaman pencarian Twitter
driver.get(url)
# Menunggu elemen tweet muncul dan menggulir halaman
SCROLL_PAUSE_TIME = 2
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Menggulung ke bawah halaman
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Tunggu beberapa saat untuk memuat halaman
time.sleep(SCROLL_PAUSE_TIME)
# Menghitung tinggi baru halaman
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# Menemukan elemen-elemen tweet
tweets = driver.find_elements(By.CSS_SELECTOR, 'article')
# Menyimpan data dalam file CSV
with open('tweets_hashtag.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Tweet"]) # Menulis header
for tweet in tweets:
writer.writerow([tweet.text])
# Menutup browser
driver.quit()
Penjelasan Mendalam
- URL Pencarian Twitter: Kita menggunakan URL pencarian Twitter dengan parameter query untuk hashtag yang diinginkan.
url = f'https://twitter.com/search?q=%23{hashtag}&src=typed_query' - Menggulir Halaman: Sama seperti sebelumnya, kita menggunakan loop untuk menggulir halaman dan memuat lebih banyak konten.
- Menyimpan Data dalam CSV: Data yang diambil disimpan dalam file CSV untuk analisis lebih lanjut.
mari kita lanjutkan dengan beberapa topik lanjutan yang penting dalam web scraping, seperti penanganan lebih lanjut untuk memastikan data berkualitas tinggi, serta penerapan konsep yang telah kita bahas dalam skenario nyata lainnya.
Langkah 8: Menangani Data yang Tidak Konsisten atau Buruk
Dalam web scraping, seringkali kita akan menghadapi data yang tidak konsisten atau tidak lengkap. Berikut adalah beberapa teknik untuk memastikan data yang diambil berkualitas tinggi:
1. Pembersihan Data
- Menghapus Karakter Tak Perlu: Membersihkan teks dari karakter yang tidak perlu atau simbol yang tidak relevan.
- Normalisasi Data: Mengubah semua teks menjadi huruf kecil, menghapus spasi tambahan, dll.
- Validasi Data: Memastikan data sesuai dengan format yang diinginkan, seperti memastikan tanggal dalam format tertentu.
Contoh Kode Pembersihan Data:
import re
def clean_text(text):
# Menghapus URL
text = re.sub(r'http\S+', '', text)
# Menghapus mentions
text = re.sub(r'@\w+', '', text)
# Menghapus hashtag
text = re.sub(r'#\w+', '', text)
# Menghapus karakter khusus
text = re.sub(r'[^A-Za-z0-9\s]', '', text)
# Menghapus spasi ekstra
text = re.sub(r'\s+', ' ', text).strip()
return text
# Contoh penggunaan fungsi clean_text
for tweet in tweets:
cleaned_text = clean_text(tweet.text)
print(cleaned_text)
Langkah 9: Penggunaan Data untuk Analisis Lebih Lanjut
Setelah mendapatkan dan membersihkan data, langkah berikutnya adalah menggunakan data tersebut untuk analisis lebih lanjut. Ini bisa termasuk analisis sentimen, analisis tren, atau bahkan pelatihan model machine learning.
1. Analisis Sentimen
- Menggunakan pustaka seperti
TextBlobatauVADERuntuk analisis sentimen sederhana.
Contoh Kode Analisis Sentimen:
from textblob import TextBlob
def analyze_sentiment(text):
analysis = TextBlob(text)
# Mengategorikan sentimen sebagai positif, negatif, atau netral
if analysis.sentiment.polarity > 0:
return 'positive'
elif analysis.sentiment.polarity < 0:
return 'negative'
else:
return 'neutral'
# Contoh penggunaan fungsi analyze_sentiment
for tweet in tweets:
cleaned_text = clean_text(tweet.text)
sentiment = analyze_sentiment(cleaned_text)
print(f"Tweet: {cleaned_text}, Sentimen: {sentiment}")
2. Visualisasi Data
- Menggunakan pustaka seperti
matplotlibatauseabornuntuk membuat grafik dan memvisualisasikan data yang dikumpulkan.
Contoh Kode Visualisasi Data:
import matplotlib.pyplot as plt
# Contoh data sentimen untuk visualisasi
sentiments = ['positive', 'negative', 'neutral', 'positive', 'negative']
# Menghitung jumlah sentimen
sentiment_counts = {
'positive': sentiments.count('positive'),
'negative': sentiments.count('negative'),
'neutral': sentiments.count('neutral')
}
# Membuat diagram batang
plt.bar(sentiment_counts.keys(), sentiment_counts.values())
plt.xlabel('Sentimen')
plt.ylabel('Jumlah')
plt.title('Analisis Sentimen Tweet')
plt.show()
Langkah 10: Automatisasi Proses Scraping
Untuk scraping yang berjalan terus-menerus atau pada jadwal tertentu, kita bisa mengotomatiskan proses ini menggunakan task scheduler seperti cron di Unix atau Task Scheduler di Windows.
1. Menjalankan Skrip secara Berkala dengan Cron (Unix/Linux)
- Tambahkan tugas cron untuk menjalankan skrip Python pada interval waktu tertentu.
Contoh Cron Job:
# Buka crontab crontab -e # Tambahkan baris berikut untuk menjalankan skrip setiap jam 0 * * * * /usr/bin/python3 /path/to/your_script.py
2. Menjalankan Skrip secara Berkala dengan Task Scheduler (Windows)
- Gunakan Task Scheduler untuk membuat tugas yang menjalankan skrip pada interval waktu tertentu.
mari kita lanjutkan dengan beberapa konsep lanjutan yang bisa memperkuat pemahaman Anda tentang web scraping dan analisis data menggunakan Python. Fokus kita akan pada teknik pengambilan data yang lebih canggih, pengelolaan data yang lebih efektif, serta beberapa studi kasus praktis.
Langkah 11: Teknik Pengambilan Data yang Lebih Canggih
1. Penggunaan XPath dengan Selenium
Selain CSS selectors, XPath bisa sangat berguna terutama ketika struktur HTML kompleks atau elemen tidak memiliki kelas atau ID yang unik.
Contoh Kode Menggunakan XPath:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless")
service = Service(executable_path='/path/to/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get('https://twitter.com/username')
# Menggulung halaman
SCROLL_PAUSE_TIME = 2
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUSE_TIME)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# Menggunakan XPath untuk menemukan tweet
tweets = driver.find_elements(By.XPATH, '//div[@data-testid="tweet"]')
for tweet in tweets:
print(tweet.text)
driver.quit()
2. Mengambil Data dari Elemen yang Terpaginasi
Banyak situs menggunakan pagination untuk membagi data menjadi beberapa halaman. Selenium bisa digunakan untuk menavigasi melalui halaman-halaman tersebut.
Contoh Kode Navigasi Pagination:
from selenium.webdriver.common.keys import Keys
# Menggulung dan menavigasi melalui halaman
for _ in range(5): # Contoh menggulir 5 kali
driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.END)
time.sleep(SCROLL_PAUSE_TIME)
tweets = driver.find_elements(By.XPATH, '//div[@data-testid="tweet"]')
for tweet in tweets:
print(tweet.text)
Langkah 12: Pengelolaan Data yang Lebih Efektif
Setelah pengambilan data, penting untuk mengelolanya dengan baik agar mudah dianalisis. Kita bisa menggunakan pandas untuk memudahkan manipulasi dan analisis data.
1. Menggunakan Pandas untuk Penyimpanan dan Analisis Data
Pandas menyediakan struktur data yang sangat kuat seperti DataFrame yang memudahkan pengolahan data.
Contoh Kode Menggunakan Pandas:
import pandas as pd
# Menyimpan tweet dalam DataFrame
tweet_texts = [tweet.text for tweet in tweets]
df = pd.DataFrame(tweet_texts, columns=['Tweet'])
# Membersihkan teks menggunakan fungsi sebelumnya
df['Cleaned_Tweet'] = df['Tweet'].apply(clean_text)
# Menyimpan DataFrame ke file CSV
df.to_csv('tweets_cleaned.csv', index=False, encoding='utf-8')
# Melakukan analisis sentimen
df['Sentiment'] = df['Cleaned_Tweet'].apply(analyze_sentiment)
# Menampilkan ringkasan data
print(df.head())
Langkah 13: Studi Kasus Praktis
Mari kita lihat beberapa studi kasus praktis untuk menerapkan teknik yang telah dipelajari.
Studi Kasus 1: Analisis Tren Hashtag
Mengambil tweet yang mengandung hashtag tertentu dan menganalisis tren penggunaannya.
Langkah-langkah:
- Scrape tweet berdasarkan hashtag.
- Bersihkan dan simpan data.
- Analisis frekuensi dan sentimen.
Contoh Kode:
import matplotlib.pyplot as plt
hashtag = 'yourHashtag'
url = f'https://twitter.com/search?q=%23{hashtag}&src=typed_query'
driver.get(url)
# Menggulung halaman untuk mendapatkan lebih banyak tweet
for _ in range(5):
driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.END)
time.sleep(SCROLL_PAUSE_TIME)
tweets = driver.find_elements(By.XPATH, '//div[@data-testid="tweet"]')
tweet_texts = [tweet.text for tweet in tweets]
# Menggunakan pandas untuk analisis
df = pd.DataFrame(tweet_texts, columns=['Tweet'])
df['Cleaned_Tweet'] = df['Tweet'].apply(clean_text)
df['Sentiment'] = df['Cleaned_Tweet'].apply(analyze_sentiment)
# Menghitung frekuensi sentimen
sentiment_counts = df['Sentiment'].value_counts()
# Visualisasi data sentimen
plt.bar(sentiment_counts.index, sentiment_counts.values)
plt.xlabel('Sentimen')
plt.ylabel('Jumlah')
plt.title(f'Analisis Sentimen untuk Hashtag #{hashtag}')
plt.show()
Studi Kasus 2: Mengambil dan Menganalisis Tweet dari Beberapa Pengguna
Langkah-langkah:
- Daftar pengguna yang ingin diambil tweet-nya.
- Loop melalui setiap pengguna dan scrape tweet mereka.
- Simpan dan analisis data.
Contoh Kode:
users = ['username1', 'username2', 'username3']
all_tweets = []
for user in users:
url = f'https://twitter.com/{user}'
driver.get(url)
for _ in range(5):
driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.END)
time.sleep(SCROLL_PAUSE_TIME)
tweets = driver.find_elements(By.XPATH, '//div[@data-testid="tweet"]')
tweet_texts = [tweet.text for tweet in tweets]
all_tweets.extend(tweet_texts)
# Menggunakan pandas untuk menyimpan dan menganalisis
df = pd.DataFrame(all_tweets, columns=['Tweet'])
df['Cleaned_Tweet'] = df['Tweet'].apply(clean_text)
df['Sentiment'] = df['Cleaned_Tweet'].apply(analyze_sentiment)
# Menyimpan ke file CSV
df.to_csv('all_users_tweets.csv', index=False, encoding='utf-8')
# Menampilkan ringkasan data
print(df.head())
Kesimpulan dan Langkah Selanjutnya
Kita telah melalui berbagai teknik dan praktik untuk melakukan web scraping Twitter dengan Python, termasuk:
- Penggunaan BeautifulSoup dan Selenium untuk mengakses dan mengambil data.
- Penggunaan XPath dan CSS Selectors untuk menargetkan elemen HTML.
- Pembersihan dan Pengelolaan Data menggunakan regex dan pandas.
- Analisis Data dengan sentimen dan visualisasi menggunakan matplotlib.
- Automatisasi dengan cron atau Task Scheduler.
Baik, mari kita lanjutkan dengan beberapa topik lanjutan yang lebih mendalam terkait web scraping dan analisis data, serta beberapa teknik praktis untuk memperkaya pemahaman dan keterampilan Anda.
Langkah 14: Penggunaan Proxies dan User Agents
Untuk menghindari deteksi dan pembatasan IP oleh situs web, Anda bisa menggunakan proxies dan mengatur User Agents. Ini membantu dalam menyamarkan permintaan scraping sebagai permintaan biasa dari pengguna yang berbeda-beda.
Menggunakan Proxies
Proxies bertindak sebagai perantara antara scraper Anda dan target situs web, memungkinkan Anda untuk mengubah alamat IP yang digunakan.
Contoh Kode dengan Proxies:
from selenium.webdriver.common.proxy import Proxy, ProxyType
# Konfigurasi proxy
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = 'http://your_proxy_here:port'
proxy.ssl_proxy = 'http://your_proxy_here:port'
capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)
driver = webdriver.Chrome(desired_capabilities=capabilities, options=chrome_options)
driver.get('https://twitter.com/username')
Mengatur User Agents
Mengubah User Agent membantu menyamarkan scraper Anda sebagai berbagai jenis browser atau perangkat.
Contoh Kode dengan User Agents:
from fake_useragent import UserAgent
# Menggunakan pustaka fake_useragent untuk mendapatkan User Agent acak
ua = UserAgent()
user_agent = ua.random
chrome_options.add_argument(f'user-agent={user_agent}')
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get('https://twitter.com/username')
Langkah 15: Mengambil Data Multimedias (Gambar dan Video)
Selain teks, seringkali kita perlu mengambil data multimedia seperti gambar dan video.
Mengambil Gambar
Contoh Kode Mengambil Gambar:
import requests
# Mengambil URL gambar
images = driver.find_elements(By.TAG_NAME, 'img')
for img in images:
src = img.get_attribute('src')
img_data = requests.get(src).content
with open(f'images/{img.get_attribute("alt")}.jpg', 'wb') as handler:
handler.write(img_data)
Mengambil Video
Mengambil video bisa sedikit lebih rumit, karena sering kali video di-hosting pada layanan terpisah atau dalam format yang berbeda.
Contoh Kode Mengambil Video:
videos = driver.find_elements(By.TAG_NAME, 'video')
for video in videos:
src = video.get_attribute('src')
video_data = requests.get(src).content
with open(f'videos/{video.get_attribute("title")}.mp4', 'wb') as handler:
handler.write(video_data)
Langkah 16: Penanganan Captcha Otomatis
CAPTCHA adalah salah satu tantangan utama dalam web scraping. Ada beberapa metode untuk mengatasi CAPTCHA secara otomatis, meskipun harus digunakan dengan sangat hati-hati karena melibatkan aspek legalitas.
Menggunakan Layanan Pihak Ketiga
Layanan seperti 2Captcha atau Anti-Captcha menawarkan solusi untuk menyelesaikan CAPTCHA secara otomatis.
Contoh Kode Menggunakan 2Captcha:
import requests
def solve_captcha(api_key, site_key, url):
s = requests.Session()
captcha_id = s.post('http://2captcha.com/in.php', data={'key': api_key, 'method': 'userrecaptcha', 'googlekey': site_key, 'pageurl': url}).text.split('|')[1]
recaptcha_answer = s.get('http://2captcha.com/res.php', params={'key': api_key, 'action': 'get', 'id': captcha_id}).text
while 'CAPCHA_NOT_READY' in recaptcha_answer:
time.sleep(5)
recaptcha_answer = s.get('http://2captcha.com/res.php', params={'key': api_key, 'action': 'get', 'id': captcha_id}).text
return recaptcha_answer.split('|')[1]
api_key = 'your_2captcha_api_key'
site_key = 'site_key_from_html'
url = 'url_of_page_with_captcha'
captcha_solution = solve_captcha(api_key, site_key, url)
Langkah 17: Studi Kasus Praktis
Mari kita lihat beberapa studi kasus yang lebih kompleks untuk menerapkan teknik-teknik lanjutan yang telah kita pelajari.
Studi Kasus 3: Scraping Data dari Situs E-Commerce
Mengambil data produk dari situs e-commerce untuk analisis harga dan inventaris.
Langkah-langkah:
- Navigasi melalui berbagai halaman produk.
- Mengambil data produk seperti nama, harga, deskripsi, dan gambar.
- Menyimpan data dalam format terstruktur untuk analisis.
Contoh Kode:
url = 'https://www.example-ecommerce.com/category/page'
driver.get(url)
products = []
for page in range(1, 6): # Misalnya, ambil data dari 5 halaman
driver.get(f'{url}?page={page}')
time.sleep(SCROLL_PAUSE_TIME)
product_elements = driver.find_elements(By.CLASS_NAME, 'product-item')
for product in product_elements:
name = product.find_element(By.CLASS_NAME, 'product-title').text
price = product.find_element(By.CLASS_NAME, 'product-price').text
description = product.find_element(By.CLASS_NAME, 'product-description').text
image_url = product.find_element(By.TAG_NAME, 'img').get_attribute('src')
products.append({
'name': name,
'price': price,
'description': description,
'image_url': image_url
})
# Menggunakan pandas untuk menyimpan data
df = pd.DataFrame(products)
df.to_csv('products.csv', index=False, encoding='utf-8')
Langkah 18: Keamanan dan Etika Scraping
Penting untuk selalu memperhatikan aspek keamanan dan etika saat melakukan web scraping.
1. Mematuhi Terms of Service (ToS)
- Pastikan selalu membaca dan mematuhi ToS situs yang Anda scrape.
2. Menggunakan Data dengan Etis
- Jangan menggunakan data untuk tujuan yang melanggar hukum atau tidak etis.
3. Menangani Data Sensitif dengan Hati-hati
- Jangan mengungkap data pribadi atau sensitif tanpa izin.
Baik, kita akan melanjutkan dengan beberapa topik tambahan yang dapat memperkaya kemampuan Anda dalam web scraping dan analisis data. Fokus kita kali ini adalah pada teknik lanjutan seperti scraping data menggunakan API, penggunaan machine learning untuk analisis data, serta studi kasus tambahan.
Langkah 19: Menggunakan API untuk Pengambilan Data
API (Application Programming Interface) sering kali merupakan cara yang lebih stabil dan etis untuk mendapatkan data dibandingkan dengan scraping langsung dari HTML. Banyak situs web besar menyediakan API resmi untuk keperluan ini.
Contoh Penggunaan Twitter API dengan Tweepy
Twitter menyediakan API yang memungkinkan Anda untuk mengakses tweet, profil pengguna, dan data lainnya. Tweepy adalah pustaka Python yang memudahkan penggunaan Twitter API.
Langkah-langkah:
- Buat akun developer di Twitter Developer dan buat aplikasi untuk mendapatkan kunci API.
- Instal Tweepy:
pip install tweepy
Contoh Kode Menggunakan Tweepy:
import tweepy
# Mengatur kunci API Anda
api_key = 'YOUR_API_KEY'
api_secret_key = 'YOUR_API_SECRET_KEY'
access_token = 'YOUR_ACCESS_TOKEN'
access_token_secret = 'YOUR_ACCESS_TOKEN_SECRET'
# Autentikasi dengan Tweepy
auth = tweepy.OAuth1UserHandler(api_key, api_secret_key, access_token, access_token_secret)
api = tweepy.API(auth)
# Mengambil tweet berdasarkan hashtag
hashtag = 'yourHashtag'
tweets = tweepy.Cursor(api.search_tweets, q=f'#{hashtag}', lang='en').items(100)
for tweet in tweets:
print(f'{tweet.user.screen_name}: {tweet.text}')
Langkah 20: Menggunakan Machine Learning untuk Analisis Data
Setelah mendapatkan data, Anda bisa menggunakan teknik machine learning untuk analisis lebih lanjut, seperti klasifikasi, prediksi, atau analisis sentimen yang lebih canggih.
Analisis Sentimen dengan Machine Learning
Scikit-learn adalah pustaka Python yang sangat populer untuk machine learning. Kita akan melihat bagaimana melakukan analisis sentimen menggunakan model machine learning sederhana.
Contoh Kode Analisis Sentimen:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
# Contoh data tweet dan label sentimen (positif/negatif)
data = [
('I love this product!', 'positive'),
('This is the worst experience ever.', 'negative'),
('Absolutely fantastic!', 'positive'),
('Not good at all.', 'negative')
]
# Memisahkan data dan label
texts, labels = zip(*data)
# Menggunakan CountVectorizer untuk mengubah teks menjadi vektor fitur
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
# Memisahkan data latih dan uji
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
# Melatih model Naive Bayes
model = MultinomialNB()
model.fit(X_train, y_train)
# Memprediksi data uji
predictions = model.predict(X_test)
# Menghitung akurasi
accuracy = accuracy_score(y_test, predictions)
print(f'Akurasi: {accuracy}')
Langkah 21: Studi Kasus Tambahan
Studi Kasus 4: Scraping dan Menganalisis Data dari Forum
Mengambil data dari forum online dan menganalisis topik yang sedang tren.
Langkah-langkah:
- Scrape judul dan isi thread dari forum.
- Bersihkan dan simpan data.
- Lakukan analisis frekuensi kata dan sentimen.
Contoh Kode:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import pandas as pd
import re
import time
# Konfigurasi webdriver
chrome_options = Options()
chrome_options.add_argument("--headless")
service = Service(executable_path='/path/to/chromedriver')
driver = webdriver.Chrome(service=service, options=chrome_options)
# Mengakses halaman forum
url = 'https://example-forum.com'
driver.get(url)
# Menggulung halaman untuk memuat lebih banyak thread
SCROLL_PAUSE_TIME = 2
for _ in range(5):
driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.END)
time.sleep(SCROLL_PAUSE_TIME)
# Mengambil judul dan isi thread
threads = driver.find_elements(By.CLASS_NAME, 'thread-item')
data = []
for thread in threads:
title = thread.find_element(By.CLASS_NAME, 'thread-title').text
content = thread.find_element(By.CLASS_NAME, 'thread-content').text
data.append({
'title': title,
'content': content
})
driver.quit()
# Menggunakan pandas untuk menyimpan dan menganalisis data
df = pd.DataFrame(data)
df['cleaned_content'] = df['content'].apply(clean_text)
# Analisis frekuensi kata
word_counts = df['cleaned_content'].str.split(expand=True).stack().value_counts()
print(word_counts.head(10))
# Analisis sentimen
df['sentiment'] = df['cleaned_content'].apply(analyze_sentiment)
sentiment_counts = df['sentiment'].value_counts()
# Visualisasi hasil
import matplotlib.pyplot as plt
plt.bar(sentiment_counts.index, sentiment_counts.values)
plt.xlabel('Sentimen')
plt.ylabel('Jumlah')
plt.title('Analisis Sentimen Thread Forum')
plt.show()
Langkah 22: Penggunaan Pustaka Scraping Lanjutan
Selain BeautifulSoup dan Selenium, ada pustaka scraping lain yang lebih canggih seperti Scrapy.
Scrapy untuk Web Scraping
Scrapy adalah framework web scraping yang kuat dan cepat, cocok untuk proyek scraping skala besar.
Instal Scrapy:
pip install scrapy
Contoh Kode dengan Scrapy:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
# Menjalankan spider Scrapy
# scrapy runspider quotes_spider.py -o quotes.json
Kesimpulan
Dengan mempelajari dan mempraktikkan langkah-langkah dan teknik lanjutan ini, Anda dapat meningkatkan kemampuan Anda dalam web scraping dan analisis data secara signifikan. Beberapa poin penting yang telah kita bahas:
- Menggunakan API untuk Pengambilan Data: Memanfaatkan API resmi untuk stabilitas dan etika.
- Machine Learning untuk Analisis Data: Menggunakan model machine learning untuk analisis sentimen dan prediksi.
- Studi Kasus Praktis: Penerapan teknik scraping pada berbagai situs.
- Pustaka Scraping Lanjutan: Menggunakan Scrapy untuk scraping skala besar.
Baik, mari kita teruskan dengan beberapa topik lanjutan yang lebih spesifik dan praktis dalam web scraping dan analisis data. Kita akan membahas beberapa teknik canggih seperti scraping dengan penggunaan Scrapy yang lebih mendalam, pengolahan data lebih lanjut dengan pandas, dan contoh kasus tambahan untuk memberikan pemahaman yang komprehensif.
Langkah 23: Scraping dengan Scrapy
Scrapy adalah framework scraping yang sangat kuat dan fleksibel, ideal untuk proyek scraping besar dan kompleks. Berikut adalah panduan lebih mendalam untuk menggunakan Scrapy.
Membuat Proyek Scrapy
- Inisialisasi Proyek Scrapy:
scrapy startproject myproject cd myproject
- Membuat Spider Baru:
scrapy genspider quotes quotes.toscrape.com
- Struktur Proyek Scrapy:
myproject/: Folder proyek utama.myproject/spiders/: Tempat spider diletakkan.myproject/items.py: Definisi item yang akan di-scrape.myproject/settings.py: Konfigurasi proyek Scrapy.
Contoh Spider Scrapy yang Lebih Kompleks
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
next_page = response.css('li.next a::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
- Menjalankan Spider:
scrapy crawl quotes -o quotes.json
Langkah 24: Pengolahan Data Lanjutan dengan Pandas
Setelah mendapatkan data scraping, langkah berikutnya adalah mengolah dan menganalisis data tersebut. Pandas adalah pustaka yang sangat berguna untuk tujuan ini.
Penggunaan Pandas untuk Pengolahan Data
- Membaca Data dari File:
import pandas as pd df = pd.read_json('quotes.json') - Membersihkan Data:
- Menghapus Duplikasi:
df.drop_duplicates(inplace=True)
- Menghapus Baris yang Kosong:
df.dropna(inplace=True)
- Menghapus Duplikasi:
- Analisis Data:
- Frekuensi Kata:
from collections import Counter all_tags = [tag for tags in df['tags'] for tag in tags] tag_counts = Counter(all_tags) print(tag_counts.most_common(10))
- Analisis Sentimen:
from collections import Counter all_tags = [tag for tags in df['tags'] for tag in tags] tag_counts = Counter(all_tags) print(tag_counts.most_common(10))
- Frekuensi Kata:
- Visualisasi Data:
import matplotlib.pyplot as plt # Visualisasi sentimen df['sentiment'].hist(bins=50) plt.title('Distribusi Sentimen') plt.xlabel('Sentimen') plt.ylabel('Frekuensi') plt.show()
Langkah 25: Studi Kasus Tambahan
Studi Kasus 5: Scraping dan Analisis Data Restoran dari Yelp
Langkah-langkah:
- Scrape data restoran dari Yelp, termasuk nama, alamat, rating, dan ulasan.
- Bersihkan dan simpan data.
- Lakukan analisis sentimen dan visualisasi hasil.
Contoh Kode:
import scrapy
class YelpSpider(scrapy.Spider):
name = "yelp"
start_urls = ['https://www.yelp.com/search?find_desc=restaurants&find_loc=San+Francisco%2C+CA']
def parse(self, response):
for business in response.css('div.businessName__09f24__3Wql2'):
yield {
'name': business.css('a.link__09f24__1kwXV::text').get(),
'rating': business.css('div.i-stars__09f24__1T6rz::attr(aria-label)').get(),
'review_count': business.css('span.reviewCount__09f24__EUXPN::text').get(),
'address': business.css('address::text').get(),
}
next_page = response.css('a.next-link::attr(href)').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
Mengolah Data dengan Pandas:
df = pd.read_json('yelp.json')
# Bersihkan rating dan review_count
df['rating'] = df['rating'].str.extract('(\d+\.\d+)').astype(float)
df['review_count'] = df['review_count'].str.extract('(\d+)').astype(int)
# Analisis Sentimen Ulasan
df['sentiment'] = df['review'].apply(lambda text: TextBlob(text).sentiment.polarity)
# Visualisasi Hasil
plt.scatter(df['rating'], df['sentiment'])
plt.title('Rating vs Sentimen')
plt.xlabel('Rating')
plt.ylabel('Sentimen')
plt.show()
Langkah 26: Penggunaan Teknologi Cloud untuk Web Scraping
Dalam proyek skala besar, menjalankan scraping di server lokal mungkin tidak efisien. Layanan cloud seperti AWS, Google Cloud, atau Azure dapat membantu dengan menyediakan infrastruktur yang lebih kuat dan skalabel.
Contoh Menggunakan AWS Lambda untuk Web Scraping
AWS Lambda memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server.
- Membuat Fungsi Lambda:
- Buat fungsi Lambda baru di AWS Console.
- Unggah kode scraping Anda sebagai file zip atau menggunakan editor di AWS Console.
- Mengonfigurasi IAM Role:
- Berikan izin yang diperlukan untuk Lambda berinteraksi dengan layanan AWS lainnya.
- Menggunakan AWS API Gateway:
- Gunakan API Gateway untuk memanggil fungsi Lambda dari HTTP request.
Langkah 27: Automatisasi dan Orkestrasi Scraping
Untuk scraping berulang atau proyek skala besar, otomatisasi dan orkestrasi penting untuk efisiensi dan pengelolaan.
Menggunakan Apache Airflow
Apache Airflow adalah platform untuk mengotomatisasi alur kerja scraping.
- Instalasi Airflow:
pip install apache-airflow
- Membuat DAG (Directed Acyclic Graph):
- Definisikan alur kerja scraping sebagai DAG di Airflow.
Contoh Kode DAG di Airflow:
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
import scraping_module # Impor modul scraping Anda
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2023, 1, 1),
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
}
dag = DAG('scraping_dag', default_args=default_args, schedule_interval=timedelta(days=1))
def scrape_function():
scraping_module.run_scraping()
t1 = PythonOperator(
task_id='scrape_task',
python_callable=scrape_function,
dag=dag,
)
t1
Kesimpulan
Dengan menguasai langkah-langkah dan teknik-teknik ini, Anda dapat melakukan web scraping dengan lebih efektif, efisien, dan etis. Berikut adalah beberapa poin penting yang telah kita bahas:
- Scrapy untuk Scraping yang Kompleks: Menggunakan Scrapy untuk proyek scraping skala besar.
- Pengolahan Data dengan Pandas: Membersihkan, menganalisis, dan memvisualisasikan data dengan pandas.
- Studi Kasus Tambahan: Penerapan teknik scraping pada situs e-commerce dan forum.
- Penggunaan Teknologi Cloud: Menjalankan scraping di cloud untuk efisiensi dan skalabilitas.
- Automatisasi dengan Airflow: Mengotomatisasi alur kerja scraping menggunakan Apache Airflow.
