top of page

เก็บข้อมูลจากทั้งเวป ใน 10 คำสั่ง Python Web Scraping

Updated: Aug 20, 2021

สิ่งที่ตาเห็น สามารถเก็บได้ทั้งหมด ใช้วิเคราะห์เท่าทันยุคข้อมูล เรียนพื้นฐานทั้งหมดที่ต้องรู้ได้จากคลิปนี้ เรียนกับ Ultimate Python


***หมายเหตุ: มีการกล่าวถึง Syntax ซึ่งเป็นข้อผิดพลาด และที่จริงต้องการหมายถึง HTML Tags


อย่าลืมกดซับให้ถึงล้านซับ

ช่วยเราถึงเป้าหมายโดยการชวนเพื่อนมากด subscribe youtube Ultimate Python

การทำงานกับข้อมูลเวปไซต์

ข้อมูลที่เราเห็นบนเวปไซต์เป็นผลลัพธ์ของโค้ด HTML ที่ไปดึงข้อมูลต่างๆ มาจัดเรียงให้สวยงามตามที่ตาเราเห็น โดย Browser จะทำความเข้าใจโค้ด HTML และเข้าไปดึงข้อความ รูป วิดีโอ หรือข้อมูลอื่นๆ ตามที่ HTML ตัวนั้นระบุจากอินเตอร์เน็ต และตีความออกมาเป็นหน้าเวปที่สวยงาม

โค้ด HTML จะประกอบไปด้วยส่วนย่อยที่เรียกว่า HTML Tags ที่แบ่งส่วนการรับผิดชอบการแสดงผลของหน้าเวปแต่ละส่วนโดยมีลักษณะที่ซ้อนกันลงไปเป็นชั้นๆ เช่น HTML Tags ที่รับผิดชอบหน้าเวปทั้งหมด จะประกอบไปด้วย HTML Tags ที่รับผิดชอบหน้าเวปด้านบน และ HTML Tags ที่รับผิดชอบแถบโฆษณาด้านล่าง เป็นต้น

หลักการสำคัญของการทำงานกับข้อมูลหน้าเวปในคลิปนี้ คือ การระบุ HTML Tags ที่เหมาะสมเพื่อการดึงข้อมูลที่เราต้องการ ให้สามารถดึงข้อมูลที่เกิดซ้ำๆ ได้อย่างมีประสิทธิภาพ โดยผ่านการระบุ ชื่อ และ Attribute

สำหรับ Chrome เราสามารถดูโค้ด HTML ของเวปใดๆ ได้โดยการกด F12 (ในการเรียนรู้ในคลิปนี้แนะนำให้ติดตั้ง Chrome)

ตัวอย่างโปรแกรมลดงาน

ในตัวอย่างจะเป็นการสร้างโปรแกรมจาก 0 เพื่อดึงข้อมูลชื่อรถ และราคา ของรถทุกคัน จากเวปไซต์ checkraka แล้วนำข้อมูลมาเก็บเป็นไฟล์ Excel

ขั้นตอนการทำงานคร่าวๆ ของโปรแกรม

ดึงข้อมูล HTML เวป >> หา HTML Tags ที่เหมาะสม >> ดึงข้อมูลจาก HTML Tags >> บันทึกเป็นตาราง >> ทำซ้ำกับข้อมูลรถคันอื่นในหน้าปัจจุบัน >> ทำซ้ำกับหน้าอื่นของเวปไซต์ >> บันทึกข้อมูลทั้งหมดเป็นไฟล์ Excel

การใช้งาน

หากต้องการทดลองใช้งานให้กด / คลิกที่สัญลักษณ์ In [ ] สีน้ำเงินด้านซ้ายของหน้ากระดาษนี้ และกดปุ่ม Run ตามด้านล่าง ทำซ้ำจนครบทุกอัน โดยจะต้องทำตามลำดับจากอันด้านบนลงไปด้านล่างของกระดาษ


หากต้องการดูโฟลเดอร์ของไฟล์ Jupyter Notebook นี้ให้กดที่ File >> Open แล้วโฟลเดอร์ที่ไฟล์ Jupyter Notebook นี้อยู่จะถูกเปิดขึ้น


ทดลองเขียนตามขั้นตอน

สำหรับคนที่อยากทดลองเขียนตามคลิปสอน Ultimate Python ได้เรียบเรียงขั้นตอนแยกไว้ให้เรียนรู้ตามได้ง่ายตามขั้นตอนด้านล่าง สำหรับคนที่อยากเห็นโปรแกรมตัวเต็มสามารถดูได้จากด้านล่างของเอกสารนี้เลย

โปรแกรมจากตัวอย่าง

โปรแกรมที่พัฒนาเสร็จแล้ว ทำการดึงข้อมูลชื่อรถทุกรุ่น พร้อมราคา และบันทึกไว้ในไฟล์ All Cars.xlsx เมื่อทำความเข้าใจตามคลิป และเข้าใจการทำงานของโปรแกรมตัวนี้แล้ว สามารถปรับใช้เก็บข้อมูลจากหน้าเวปที่คุณต้องการได้เลย!

ติดตั้งเครื่องมือ


In [1]:
pip install bs4
Collecting bs4   Downloading bs4-0.0.1.tar.gz (1.1 kB) Collecting beautifulsoup4   Downloading beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)      |████████████████████████████████| 115 kB 12.5 MB/s eta 0:00:01 Collecting soupsieve>1.2; python_version >= "3.0"   Downloading soupsieve-2.2-py3-none-any.whl (33 kB) Building wheels for collected packages: bs4   Building wheel for bs4 (setup.py) ... done   Created wheel for bs4: filename=bs4-0.0.1-py3-none-any.whl size=1272 sha256=9760bc0c1cff80a3b941bc4d565662bdd4eb1b4af342a414ac633289d5d02ae1   Stored in directory: /home/jovyan/.cache/pip/wheels/19/f5/6d/a97dd4f22376d4472d5f4c76c7646876052ff3166b3cf71050 Successfully built bs4 Installing collected packages: soupsieve, beautifulsoup4, bs4 Successfully installed beautifulsoup4-4.9.3 bs4-0.0.1 soupsieve-2.2 Note: you may need to restart the kernel to use updated packages. 


In [2]:
pip install requests
Requirement already satisfied: requests in /srv/conda/envs/notebook/lib/python3.6/site-packages (2.24.0) Requirement already satisfied: idna<3,>=2.5 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from requests) (2.10) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from requests) (1.25.10) Requirement already satisfied: chardet<4,>=3.0.2 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from requests) (3.0.4) Requirement already satisfied: certifi>=2017.4.17 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from requests) (2020.6.20) Note: you may need to restart the kernel to use updated packages. 


In [30]:
pip install pandas
Requirement already satisfied: pandas in /srv/conda/envs/notebook/lib/python3.6/site-packages (1.1.5) Requirement already satisfied: python-dateutil>=2.7.3 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from pandas) (2.8.1) Requirement already satisfied: pytz>=2017.2 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from pandas) (2020.5) Requirement already satisfied: numpy>=1.15.4 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from pandas) (1.19.5) Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.6/site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0) Note: you may need to restart the kernel to use updated packages. 


In [88]:
pip install openpyxl
Collecting openpyxl   Downloading openpyxl-3.0.6-py2.py3-none-any.whl (242 kB)      |████████████████████████████████| 242 kB 12.4 MB/s eta 0:00:01 Collecting jdcal   Downloading jdcal-1.4.1-py2.py3-none-any.whl (9.5 kB) Collecting et-xmlfile   Downloading et_xmlfile-1.0.1.tar.gz (8.4 kB) Building wheels for collected packages: et-xmlfile   Building wheel for et-xmlfile (setup.py) ... done   Created wheel for et-xmlfile: filename=et_xmlfile-1.0.1-py3-none-any.whl size=8915 sha256=cd04d77fd7c833c534a94275a57f2cacb2babc68b2bb884a05676d659ac5fde0   Stored in directory: /home/jovyan/.cache/pip/wheels/ef/92/e0/956c00decf3091294b8800d9104f6169a1adacfaafd122ed42 Successfully built et-xmlfile Installing collected packages: jdcal, et-xmlfile, openpyxl Successfully installed et-xmlfile-1.0.1 jdcal-1.4.1 openpyxl-3.0.6 Note: you may need to restart the kernel to use updated packages. 

นำเข้าเครื่องมือที่ต้องการ


In [89]:
import pandas as pd
import bs4
import requests
import openpyxl

เก็บข้อมูลจากทั้งเวปไซต์


In [86]:
page = 1
name_list = []
price_list = []
while page <= 110:
  data = requests.get('https://www.checkraka.com/car/?quicksearch_order=update%2CDESC&page=' + str(page))
  soup = bs4.BeautifulSoup(data.text)
  for c in soup.find_all('div',{'class':'content c158'}):
    name_list.append(c.find('div',{'class':'data'}).find('a').text)
    p = c.find('div',{'class':'price'}).text.split()[0].replace(',','')
    if p == 'call':
      price_list.append(p)
    else:
      price_list.append(int(p))
  print('Complete page number: ',page)
  page += 1
table = pd.DataFrame([name_list,price_list]).transpose()
table.columns = ['name','price']
table.set_index('name')
table.to_excel('All Cars.xlsx',engine='openpyxl')
Complete page number:  1 
Complete page number:  2 
Complete page number:  3 
...
Complete page number:  108 
Complete page number:  109 
Complete page number:  110 

อยากมีเพื่อนแลกเปลี่ยนความรู้ Python

เข้าร่วมกลุ่ม ลดงานด้วยPython โชว์ผลงาน หาไอเดียจากท่านอื่น หรือโพสสอบถามแลกเปลี่ยนได้เลย

เรียน Web Scraping ลงมือทำจริง เครื่องมือครบๆ

เรียนกับ Ultimate Python Web Scraping รวม Workshop เก็บข้อมูลจากเวปไซต์ที่คุณเข้าใช้ทุกวัน พร้อมเครื่องมือสกัดข้อมูลมาใช้แบบครบๆ




8,466 views0 comments

Comments


bottom of page