ChatGPT กับการ scrape ข้อมูลเว็บ
การรวบรวมข้อมูลตัวบทเพื่อสร้าง corpus นั้น นอกจากการใช้โปรแกรมที่สร้างขึ้นมาเพื่อการ scrape ข้อมูลอย่าง Octoparse หรือ ParseHub แล้ว ChatGPT ก็เป็นอีกตัวเลือกหนึ่งที่สามารถใช้งานได้. ในที่นี้ สมมติว่าเราต้องการข้อมูลการวิจารณ์ภาพยนตร์จากเว็บ imdb.com โดย copy url หน้าเว็บที่มี reviews ของภาพยนตร์เรื่องนั้นให้ ChatGPT scrape ข้อมูลให้
เนื่องจากได้ติดตั้ง plugin Scraper ซึ่งใช้สำหรับ scrape ข้อมูลเว็บ plugin ตัวนี้จึงถูกเรียกใช้ก่อน แต่ Scraper ไม่สามารถสกัดข้อมูลที่ต้องการให้ได้ เลยแนะให้เขียน code โปรแกรมเพื่อการนี้
เมื่อสั่งให้เขียนโปรแกรมและทดลอง run ให้ด้วย ChatGPT ก็เขียน code มาให้ แต่บอกว่าไม่สามารถ run code ให้ได้ต้องลองเอาไปใช้เอง
import requests
from bs4 import BeautifulSoup
import csv
def scrape_imdb_reviews(url):
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
reviews = soup.find_all('div', class_='review-container')
with open('imdb_reviews.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'Review', 'Rating'])
for review in reviews:
title = review.find('a', class_='title').text.strip()
review_text = review.find('div', class_='text').text.strip()
rating = review.find('span', class_='rating-other-user-rating')
rating = rating.find('span').text if rating else 'No Rating'
writer.writerow([title, review_text, rating])
# URL of the IMDb movie reviews page
url = 'https://www.imdb.com/title/tt0120689/reviews?ref_=tt_ql_2'
scrape_imdb_reviews(url)
เมื่อทดลองใช้ code ที่ได้มาก็ได้ผลตามที่ต้องการเก็บในไฟล์ csv ตามที่ระบุในโปรแกรม โดยสกัดข้อมูลการวิจารณ์ในหน้าเว็บมาได้ครบ
อย่างไรก็ตาม เนื่องจากข้อมูลมีมากกว่าที่เห็น ในเว็บมีปุ่มให้กด Load More เพื่อดึงข้อมูลหน้าถัดไปมาให้ แต่โปรแกรมที่ได้มาไม่สามารถดึงข้อมูลหน้าถัดไปไม่ได้ จึงถาม ChatGPT ว่าจะแก้ไขโปรแกรมให้ช่วยดึงข้อมูลหน้าถัด ๆ ไปได้ไหม. ChatGPT ก็แนะว่าควรต้องใช้ Selenium และติดตั้ง WebDriver ด้วย ในที่นี้เลือก Chrome และติดตั้ง ChromeDriver และใช้ code ที่ได้มาไปทดลองใช้. ระหว่างการใช้งาน เมื่อมี error message เกิดขึ้น ก็นำกลับมาถาม ChatGPT ก็จะช่วยดูและแนะว่าจะแก้ไขอย่างไร จนสุดท้ายก็ได้ code ที่สามารถใช้งานได้จริง
code สุดท้ายที่ใช้งานได้เป็นดังนี้. ซึ่งเมื่อทดลองใช้ ก็สามารถดึงข้อมูล review ออกมาได้มากกว่าหนึ่งหน้าตามที่ต้องการ
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import csv
import time
def scrape_imdb_reviews(url):
# Setup Selenium WebDriver
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.get(url)
try:
while True: # Continuously click the "Load More" button
load_more = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "load-more-trigger"))
)
load_more.click()
time.sleep(2) # Wait for the page to load more items
except Exception as e:
print("All reviews loaded or an error occurred:", str(e))
# Now that all reviews are loaded, parse the page with BeautifulSoup
soup = BeautifulSoup(driver.page_source, 'html.parser')
reviews = soup.find_all('div', class_='review-container')
with open('imdb_reviews.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'Review', 'Rating'])
for review in reviews:
title = review.find('a', class_='title').text.strip()
review_text = review.find('div', class_='text').text.strip()
rating = review.find('span', class_='rating-other-user-rating')
rating = rating.find('span').text if rating else 'No Rating'
writer.writerow([title, review_text, rating])
driver.quit()
# Path to your WebDriver executable
driver_path = '/Applications/chromedriver-mac-arm64'
# URL of the IMDb movie reviews page
url = 'https://www.imdb.com/title/tt0120689/reviews?ref_=tt_ql_2'
#scrape_imdb_reviews(url, driver_path)
scrape_imdb_reviews(url)
ตัวอย่างการใช้ ChatGPT นี้จะเห็นว่า เราสามารถ scrape ข้อมูลจากหน้าเว็บต่าง ๆ ที่ต้องการ โดยให้ ChatGPT เข้าไปดูและวิเคราะห์หน้าเว็บนั้นเพื่อเห็นโครงสร้างและเขียนโปรแกรมที่จะใช้สกัดข้อมูลที่ต้องการได้. โปรแกรม code ที่ ChatGPT ให้ในแต่ละงานอาจต่างกัน แต่เราสามารถทดลอง run และเอาปัญหาที่พบกลับมาถามเพื่อแก้ไข code จนกว่าจะได้ผลตามต้องการได้. การใช้ ChatGPT จึงเป็นอีกทางเลือกหนึ่งนอกเหนือจากการใช้โปรแกรมสำเร็จรูปอย่าง Octoparse หรือ ParseHub