เก็บข้อมูล user review บน mobile app ยากไหม? มาลองกัน!
มีใครเคยเก็บข้อมูลที่มีจำนวนมากๆ กันบ้างไหมนะ แล้วเก็บกันยังไง หรือว่าใช้วิธีการ copy paste ถ้าใครเคยยกมือขึ้น 🙌🏼 วันนี้เราจะมาไถ่ข้อมูลและเก็บเป็น csv หรือ excel กัน
Intro
ก่อนอื่นมารู้จัก user review กันก่อน ถ้าใครที่ใช้ smart phone ทั้งระบบ iOS และ android เราจำเป็นต้องดาวน์โหลดแอปพลิเคชันบน App Store และ Play Store ตามลำดับ คราวนี้ถ้าเกิดเป็นองค์กรหรือบริษัทที่ต้องการดู feedback จากลูกค้าของพวกเขาว่ามีผลตอบรับเป็นยังไงบ้าง คงหนีไม่พ้นที่ต้องเข้าไปในเว็บไซค์ของ app
ถ้าต้องการเก็บข้อมูลทั้งหมดแหละจะทำกันยังไง ? ในบทวามนี้จะพามารู้จักเว็บไซต์ที่ชื่อว่า
Sensor Tower จะเป็นเว็บที่เอาไว้วิเคราะห์ meta data ของแอปพลิเคชันที่อยู่ในสโตร์
เรามาลองเลือกสักหนึ่งแอปพลิเคชันสำหรับบทความนี้กันครับ ขอเลือก …. อันดับที่ 1 ของแอปพลิเคชันฟรีเลยละกันครับ
ในหน้าแรกจะเป็นการ vistualize ข้อมูลออกมาเช่น review ในแต่วันละเป็นยังไง, คำอธิบายของแอป, ranking และ อื่นๆ ในบทความนี้จะมาดูในส่วนของ user review
ในส่วนของหน้า user review เราจะเจอข้อมูลเยอะแยะมากมาย สามารถกรองข้อมูลที่เราต้องการได้ในระดับหนึ่ง
🚨 Geek Alert 🚨
เครื่องมือที่จำเป็นสำหรับการทำ Scrape หรือ ไถ่ข้อมูลนั้นเอง
- Python
- Jupyter notebook
- Chrome
- Chrome driver
สำหรับ Chrome driver ให้ดาวน์โหลดตรงกับ browser version ที่คุณใช้ ลิงค์ดาวน์โหลด
เริ่มต้นด้วยการเปิด notebook โดยใช้ Jupyter notebook ใน row แรกเราจะทำการ install dependency ตามนี้
!pip install bs4
!pip install pandas
!pip install selenium
- bs4 ไว้สำหรับการดึงขึ้นมูลใน HTML
- pandas ไว้สำหรับการปรับปรุงข้อมูลในรูปแบบตาราง คล้าย excel
- selenium ไว้สำหรับเป็น driver บน web browser
ถ้าพร้อมแล้วมาลุยกันต่อเลย
import lib ที่จำเป็นในการงานด้านล่างนี้ เอาไว้ row ที่ 2
from bs4 import BeautifulSoup
import pandas as pd
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
พอทำการ import เสร็จแล้วเราจะมาเปิด web browser และพาไป link ของ sensor tower
driver = webdriver.Chrome('Path of your chrome driver')
driver.get('https://sensortower.com/ios/TH/chonburi-hospital/app/hm-phr-m/1559337829/review-history?search=&start_date=2021-07-31&end_date=2021-10-28&selected_tab=reviews')
เพิ่ม function สำหรับการเรียกดูดหน้าเว็บให้เป็น html
def get_page():
doc = BeautifulSoup(driver.page_source)
rows = doc.select("tbody tr")
datapoints = []
for row in rows:
cells = row.select("td")
data = {
'Country': cells[0].text.strip(),
'Date': cells[1].text.strip(),
'Rating': cells[2].select_one('.gold')['style'],
'Review': cells[3].select_one('.break-wrap-review').text.strip(),
'Version': cells[4].text.strip()
}
datapoints.append(data)
return datapoints
ต่อไปจะเป็นการไถ่ข้อมูลไปเรื่อยๆ จนครบทุกหน้า
all_data = []
wait = WebDriverWait(driver, 5, poll_frequency=0.05)
while True:
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, '.ajax-loading-cover'))) results = get_page()
all_data.extend(results) paging_group = driver.find_elements_by_css_selector(".universal-flat-button-group.right-aligned-group")[3]
next_button = paging_group.find_elements_by_css_selector(".universal-flat-button")[1] if next_button.get_attribute('disabled'):
break next_button.click()
time.sleep(0.5)
จะมี while loop วนไปเรื่อยๆ จนโดน break ถ้าปุ่ม next button ไม่เปิดให้ใช้งาน และในทุกๆ การโหลดของแต่ละหน้าจะเก็บข้อมูลลงใน list ไว้ให้เรียบร้อย
หลังจากที่ได้ข้อมูลมาแล้วก็จะเป็นการ save เก็บเป็น csv หรือ excel
df = pd.DataFrame(all_data)
df.to_csv("user_review.csv", index=False)
# TO Excel
!pip install openpyxl
df.to_excel("user_review.csv", index=False)
Note: สำหรับ excel จำเป็นต้องลง library ที่ชื่อว่า openpyxl เพื่อเป็น driver ในการสร้างไฟล์ excel
ก็เสร็จเป็นที่เรียบร้อยนะครับ สำหรับการไถ่ข้อมูล user review จากเว็บ sensor tower จากที่ลองทำดูไม่ยากใช่ไหมครับ ? หลังจากนี้จะเป็นการนำข้อมูลไปใช้งานต่อเช่นการทำความสะอาดข้อมูล เพื่อเตรียมนำไปวิเคราะห์หรือหาโมเดลไว้สำหรับหาความตอบโจทย์ทางธุรกิจต่อไป
What’s next ?
หลังจากที่ทุกคนได้ลอง ไถ่ข้อมูลบน sensor tower กันแล้ว บทความต่อไป ผมจะมาบอกวิธีการไถ่บน facebook หรือ twitter ต่อไปครับ ถ้าใครชอบบทความสไตล์ how-to แบบนี้
โปรดแชร์บทความให้คนรอบตัวได้อ่านกันนะครับ แล้วพบกันใหม่ 👋🏼