สิ่งที่ตาเห็น สามารถเก็บได้ทั้งหมด ใช้วิเคราะห์เท่าทันยุคข้อมูล เรียนพื้นฐานทั้งหมดที่ต้องรู้ได้จากคลิปนี้ เรียนกับ 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 เก็บข้อมูลจากเวปไซต์ที่คุณเข้าใช้ทุกวัน พร้อมเครื่องมือสกัดข้อมูลมาใช้แบบครบๆ
Comments