Mengintegrasikan Python dengan MySQL (Part 2) – Menyimpan Data Hasil Scraping ke Database MySQL

“Getting information off the Internet is like taking a drink from a firehose.”

~ Mitchell Kapor

Di postingan kali ini, kita akan menginput data dari file CSV ke database MySQL secara otomatis menggunakan python (berhubung author lupa cara otomatis menyimpan data hasil scraping langsung ke database, kali ini kita terpaksa sedikit memutar dulu, hahaha :D).

Cara yang dibabarkan di postingan kali ini, sebenarnya tidak hanya berlaku untuk kasus data hasil web scraping saja, tapi juga berlaku dalam banyak kasus yang sering dihadapi sehari-hari. Misalnya jika selama ini kita/suatu perusahaan menyimpan data dalam bentuk excel offline atau googlesheet, namun pada suatu ketika, dilakukan enablement sistem/teknologi sehingga data-data yang sangat banyak tersebut ingin disimpan pada database MySQL.

Langkah pertama (untuk berjaga-jaga), kita buat agar tabel database kita mampu menyimpan character unicode (karena secara default, MySQL tidak bisa menghandle character unicode. Kita terapkan kepada semua kolom pada tabel “tables”, dengan perintah seperti di bawah (masih ingat nama-nama kolomnya? Baca lagi di sini.): 🙂

ALTER DATABASE scrapedwiki CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

USE scrapedwiki;

ALTER TABLE tables CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE name name VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE creator creator VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE first_public_release first_public_release VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE latest_stable_version latest_stable_version VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE latest_release_date latest_release_date VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE programming_language programming_language VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE cost_USD cost_USD VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE software_license software_license VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE open_source open_source VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE CLI_available CLI_available VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tables CHANGE minimum_installed_size minimum_installed_size VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Bisa kita lihat di atas, untuk membuat database mampu menyimpan character unicode, kita ubah utf8mb4 menjadi utf8mb4_unicode_ci.

Tampilan di MySQL Command Line Client tidak terlalu spesial, hanya diberitahukan bahwa kita telah sukses mengubah query (status “Query OK”), namun, secara teknis, database kita telah mampu menyimpan beragam character unicode, seperti huruf yang memiliki umlaut, atau bahkan huruf Mandarin). 😀

alterDatabaseUnicode
Sumber Gambar: Pengalaman Pribadi.

Selanjutnya, mari kita pindahkan secara otomatis data hasil scraping kita (editors.csv seperti dibahas di sini) ke database “scrapedwiki” dengan script python di bawah ini:

import csv
import pymysql

#Connecting to MySQL in Windows
conn = pymysql.connect(host="127.0.0.1", port = 3306, user = "root", passwd = 'root', database = "mysql", charset = "utf8")
cur = conn.cursor()
cur.execute("USE scrapedwiki")
print(cur)
print(conn)

with open('../wswp/files/editors.csv') as scrapeddata:
	data = csv.DictReader(scrapeddata)
	for row in data:
		sql = "INSERT INTO tables (name, creator, first_public_release, latest_stable_version, latest_release_date, programming_language, cost_USD, software_license, open_source, CLI_available, minimum_installed_size) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" %(str(row["name"]),str(row["creator"]),str(row["first_public_release"]),str(row["latest_stable_version"]),str(row["latest_release_date"]),str(row["programming_language"]),str(row["cost_USD"]),str(row["software_license"]),str(row["open_source"]),str(row["CLI_available"]),str(row["minimum_installed_size"]))
		print(sql)
		cur.execute(sql)
		conn.commit()

cur.close()
print("Done")

See it in action! 😀

insertAllScrapedData
Sumber Gambar: Pengalaman Pribadi.

Dengan melihat console Anaconda Prompt di atas, dapat disimpulkan, input data hasil scraping kita dari file CSV sudah sukses. 🙂

Untuk mengkonfirmasinya, silakan jalankan perintah SELECT * FROM tables; di MySQL Command Line Client (jangan lupa, sebelumnya kita jalankan dulu perintah USE scrappedwiki; untuk masuk ke database kesayangan kita). Maka akan kita peroleh tampilan seperti di bawah ini apabila sukses.

SQLTables
Sumber Gambar: Pengalaman Pribadi.

Kurang apik ya tampilannya?Hahaha. 😀

Jika ingin melihat tampilan yang apik, silakan sodara-sodari coba perintah SELECT * FROM tables; melalui MySQL Workbench, atau melalui SQLYog, jika anda pengguna Windows. Di screenshot di bawah sih saya pakai SQLYog karena lebih ringan.

sqlYog
Sumber Gambar: Pengalaman Pribadi.

Tada, seluruh data anda telah tersimpan dengan rapi di database MySQL, tanpa kesulitan INSERT data satu-persatu! 🙂

sqlYogDemo
Sumber Gambar: Pengalaman Pribadi.

Dan database anda telah siap, terhidang rapi, untuk anda menjalankan perintah-perintah SQL untuk bermain-main dengan data yang anda miliki.

Semoga bermanfaat selalu ya, selamat mencoba! 🙂

 

References & Further Reading

Comparison of Text Editors.

Import CSV Data into MySQL via PyMySQL in Python 3.3.

Mengintegrasikan Python dengan MySQL (Part 1).

Mitchell R. (2015): Web Scraping with Python, 2nd Edition: Collecting Data from Modern Web, O’Reilly Media Inc.

Scraping Data Tabel HTML Wikipedia (with Python).

Unicode.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google

You are commenting using your Google account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s