Cara Mencuri Semua Data Website
- Krisna Mughni
- Jul 25, 2020
- 5 min read

Ada saat-saat ketika bekerja, kita menyadari bahwa mungkin memerlukan sejumlah besar data dalam waktu singkat. Ini bisa menjadi cara apabila kita menginginkan serangkaian informasi spesifik dari situs web tertentu dalam waktu singkat dalam project kita.
Salah satu opsi bisa dengan memeriksa situs web ini dan secara manual mengetikkan setiap informasi yang diminta. Atau kita bisa lebih baik lagi, kita bisa membuat program basis Python untuk melakukan semua pekerjaan berat itu untuk kita!.
Dengan menggunakan salah satu pustaka Python yang paling berguna, BeautifulSoup, kita dapat mengumpulkan sebagian besar data yang ditampilkan di situs web mana pun dengan menulis beberapa kode yang relatif sederhana. Tindakan ini disebut Web Scraping. Dalam beberapa bagian selanjutnya, kita akan mempelajari dan menjelaskan dasar-dasar BeautifulSoup dan bagaimana hal itu dapat digunakan untuk mengumpulkan data dari hampir semua situs web.
Tantangan
Untuk mempelajari cara menggunakan BeautifulSoup, pertama-tama kita harus memiliki alasan untuk menggunakannya. Katakanlah secara hipotesis, kita memiliki pelanggan yang mencari penawaran dari orang-orang terkenal. Mereka ingin memiliki penawaran baru setiap minggu untuk tahun berikutnya. Mereka menugaskan kita dengan pekerjaan untuk memberi mereka setidaknya lima puluh dua kutipan terkenal dan penulisnya masing-masing.
Situs web untuk Scraping
Kita mungkin bisa pergi ke situs web mana pun untuk menemukan kutipan/quotes, tetapi kita akan menggunakan situs web ini untuk daftar quotes. Sekarang pelanggan kita ingin agarquotes ini diformat ke dalam lembar kerja sederhana. Jadi sekarang kita memiliki pilihan untuk mengetik lima puluh dua kutipan dan penulisnya masing-masing dalam spreadsheet atau kita dapat menggunakan Python dan BeautifulSoup untuk melakukan semua itu untuk kita. Jadi demi waktu dan kesederhanaan, kita lebih suka menggunakan Python dan BeautifulSoup.
Memulai BeautifulSoup
Mari kita mulai dengan membuka IDE, kami akan menggunakan Jupyter Notebook.
Importing Python Libraries
Kita akan memulainya dengan importing the libraries needed untuk awal dari BeautifulSoup:
from bs4 import BeautifulSoup as bs
import pandas as pd
pd.set_option('display.max_colwidth', 500)
import time
import requests
import random
Accessing the Website
Selanjutnya kita harus mengakses situs web untuk BeautifulSoup dengan menjalankan kode berikut:
page = requests.get("http://quotes.toscrape.com/")
page#
<Response [200]>
Ini mengembalikan kode status respons yang memberi tahu kita jika permintaan telah berhasil diselesaikan. Di sini kami mencari Respons [200] yang berarti bahwa kami telah berhasil mencapai situs web.
Parsing the Website
Di sini kita akan menguraikan situs web menggunakan BeautifulSoup.
soup = bs(page.content)
soup
Menjalankan kode ini akan mengembalikan apa yang tampak seperti dokumen teks tercetak dalam kode HTML yang terlihat seperti ini:

Kita dapat menavigasi dokumen di atas yang diuraikan menggunakan BeautifulSoup.
Navigating the Soup
Sekarang kita perlu menemukan hal yang tepat yang kita cari dalam dokumen HTML yang diuraikan. Mari kita mulai dengan menemukan quotes. Cara mudah untuk menemukan apa yang kami cari adalah dengan:
1). Pergi ke halaman web dan temukan informasi yang diinginkan (dalam kasus kami, kutipan).
2). Highlight informasi itu (quotes).
3). Klik kanan dan pilih Inspect.

Ini akan memunculkan jendela baru yang terlihat seperti ini:

Bagian yang di Highlight adalah tempat kita akan menemukan quotes yang kita cari. Cukup klik panah di sebelah kiri bagian yang Highlight untuk melihat quotes dalam kode.
HTML Information for Navigation
Berdasarkan kode HTML yang di Highlight, kita dapat menggunakan informasi itu untuk menavigasi. Kami akan menggunakan atribut . find_all () dalam kode untuk berpotensi menemukan kutipan yang akan dicari. Atribut ini akan dapat mengembalikan kepada kita baris (atau baris) kode yang diinginkan berdasarkan argumen apa pun yang kita berikan. Karena kita dapat melihat bahwa kode HTML untuk kutipan berisi class = "text", kita dapat menggunakannya dalam kode BeautifulSoup:
soup.find_all(class_='text')
Menjalankan kode ini akan mengembalikan hasil berikut:

Dari sini, kita dapat melihat bahwa kita berhasil menemukan dan mengambil kode dan teks yang berisi quotes yang diperlukan. Untuk hanya mengambil teks dan mengecualikan kode yang tidak perlu, kita harus menggunakan atribut .text di setiap hasil. Untuk melakukannya, kita akan mengulangi daftar menggunakan loop "for":
quotes = [i.text for i in soup.find_all(class_='text')]
quotes
Ini akan memberi kita daftar quotes tanpa masing-masing kode HTML:

Sekarang kita tahu bagaimana kita dapat mengakses quotes di dalam situs web dan mengambilnya untuk tujuan kita. Ulangi langkah yang disebutkan sebelumnya untuk mengambil nama penulis untuk yang lain:
authors = [i.text for i in soup.find_all(class_='author')]
Accessing Multiple Pages
Sekarang kita tahu cara mengambil data dari halaman web tertentu, kita dapat beralih ke data dari set halaman berikutnya. Seperti yang dapat kita lihat dari situs web, semua kutipan tidak disimpan pada satu halaman. Kita harus dapat menavigasi ke halaman yang berbeda di situs web untuk mendapatkan lebih banyak data.
Perhatikan bahwa URL untuk setiap halaman baru berisi nilai yang berubah:
http://quotes.toscrape.com/page/2/
http://quotes.toscrape.com/page/3/
etc.
Mengetahui hal ini, kita dapat membuat daftar URL sederhana untuk diulangi dalam mengakses halaman yang berbeda di situs web:
urls=[f"http://quotes.toscrape.com/page/{i}/" for i in range(1,11)]urls
Ini mengembalikan daftar situs web yang dapat kita gunakan:

Dari daftar ini, kita dapat membuat loop "for" yang lain untuk mengumpulkan jumlah quotes yang diperlukan dan masing-masing penulisnya.
Avoiding Web Scraping Detection
Satu hal penting yang perlu diperhatikan: beberapa situs web tidak menyetujui web Scraping. Situs-situs ini akan menerapkan cara untuk mendeteksi jika Anda menggunakan alat web Scraping seperti Beautiful Soup. Sebagai contoh, sebuah situs web dapat mendeteksi jika sejumlah besar permintaan dilakukan dalam waktu singkat. Untuk menghindari deteksi, kita dapat mengacak tingkat permintaan. Inilah cara kami melakukannya:
Buat daftar nilai:
rate = [i/10 for i in range(10)]
Kemudian di akhir setiap loop, masukkan potongan kode berikut:
time.sleep(random.choice(rate))
Di sini kita secara acak memilih nilai dari daftar yang kita buat dan menunggu jumlah waktu yang dipilih sebelum loop dimulai lagi. Ini akan memperlambat kode, tetapi akan membantu kita menghindari deteksi.
Bringing it all Together
Sekarang kita memiliki semua bagian, kita dapat membuat loop "for" terakhir yang akan mengumpulkan setidaknya 52 kutipan dan penulisnya masing-masing:
List of Authors and Quotes
authors = []
quotes = []
# List of URLs
urls = [f”http://quotes.toscrape.com/page/{i}/" for i in range(1,11)]
# List for Randomizing our request rate
rate = [i/10 for i in range(10)]
# Iterating through the URLS
for url in urls:
# Accessing the Webpage
page = requests.get(url)
# Getting the webpage’s content in pure html
soup = bs(page.content)
# Adding the authors and quotes to their lists
authors.extend([i.text for i in soup.find_all(class_=’author’)])
quotes.extend([i.text for i in soup.find_all(class_=’text’)])
# Checking to see if we hit our required number of quotes then
breaking the loop
if len(quotes) >= 52:
break
# Randomizing our request rate
time.sleep(random.choice(rate))
Setelah kita menjalankan kode di atas, kita akan berakhir dengan daftar kutipan dan daftar penulis. Namun, pelanggan kita menginginkan kutipan dalam spreadsheet. Untuk mengakomodasi permintaan itu, kita harus menggunakan pustaka Python: Pandas.
Memasukkan daftar ke dalam Pandas DataFrame sangat sederhana:
# Creating a DataFrame to store our newly scraped information
df = pd.DataFrame()
# Storing the quotes and authors in their respective columns
df['Authors'] = authorsdf['Quotes'] = quotes
Karena quotes dan penulis sudah secara berurutan, mereka akan mudah untuk dimasukkan ke dalam DataFrame.
Setelah kita selesai dan menjalankan kode di atas, DF final akan terlihat seperti ini:

Luar biasa! DF tampak hebat dan dalam format yang persis seperti yang diminta oleh pelanggan. Kita kemudian dapat menyimpan DF sebagai file spreadsheet excel yang kemudian dapat kita kirim ke pelanggan.
Comments