โมดูล Python สำหรับการขูดเว็บ
ในบทนี้ให้เราเรียนรู้โมดูล Python ต่างๆที่เราสามารถใช้สำหรับการขูดเว็บ
สภาพแวดล้อมการพัฒนา Python โดยใช้ Virtualenv
Virtualenv เป็นเครื่องมือในการสร้างสภาพแวดล้อม Python ที่แยกได้ ด้วยความช่วยเหลือของ Virtualenv เราสามารถสร้างโฟลเดอร์ที่มีไฟล์ปฏิบัติการที่จำเป็นทั้งหมดเพื่อใช้แพ็คเกจที่โครงการ Python ของเราต้องการ นอกจากนี้ยังช่วยให้เราสามารถเพิ่มและแก้ไขโมดูล Python ได้โดยไม่ต้องเข้าถึงการติดตั้งส่วนกลาง
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้ง virtualenv -
(base) D:\ProgramData>pip install virtualenv
Collecting virtualenv
Downloading
https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c3
5d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 1.9MB 86kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
ตอนนี้เราต้องสร้างไดเร็กทอรีซึ่งจะเป็นตัวแทนของโครงการด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -
(base) D:\ProgramData>mkdir webscrap
ตอนนี้เข้าสู่ไดเรกทอรีนั้นด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -
(base) D:\ProgramData>cd webscrap
ตอนนี้เราจำเป็นต้องเริ่มต้นโฟลเดอร์สภาพแวดล้อมเสมือนที่เราเลือกดังนี้ -
(base) D:\ProgramData\webscrap>virtualenv websc
Using base prefix 'd:\\programdata'
New python executable in D:\ProgramData\webscrap\websc\Scripts\python.exe
Installing setuptools, pip, wheel...done.
ตอนนี้เปิดใช้งานสภาพแวดล้อมเสมือนจริงด้วยคำสั่งที่ระบุด้านล่าง เมื่อเปิดใช้งานสำเร็จคุณจะเห็นชื่อทางด้านซ้ายมือในวงเล็บ
(base) D:\ProgramData\webscrap>websc\scripts\activate
เราสามารถติดตั้งโมดูลใดก็ได้ในสภาพแวดล้อมนี้ดังนี้ -
(websc) (base) D:\ProgramData\webscrap>pip install requests
Collecting requests
Downloading
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl (9
1kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 148kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
Downloading
https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca
55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133
kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 369kB/s
Collecting certifi>=2017.4.17 (from requests)
Downloading
https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee6364
4d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
(147kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 153kB 527kB/s
Collecting urllib3<1.24,>=1.21.1 (from requests)
Downloading
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl (133k
B)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 517kB/s
Collecting idna<2.8,>=2.5 (from requests)
Downloading
https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746
a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 61kB 339kB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1
urllib3-1.23
สำหรับการปิดใช้งานสภาพแวดล้อมเสมือนเราสามารถใช้คำสั่งต่อไปนี้ -
(websc) (base) D:\ProgramData\webscrap>deactivate
(base) D:\ProgramData\webscrap>
คุณจะเห็นว่า (websc) ถูกปิดใช้งาน
โมดูล Python สำหรับการขูดเว็บ
การขูดเว็บเป็นกระบวนการสร้างตัวแทนซึ่งสามารถแยกวิเคราะห์ดาวน์โหลดและจัดระเบียบข้อมูลที่เป็นประโยชน์จากเว็บโดยอัตโนมัติ กล่าวอีกนัยหนึ่งคือแทนที่จะบันทึกข้อมูลจากเว็บไซต์ด้วยตนเองซอฟต์แวร์ขูดเว็บจะโหลดและดึงข้อมูลจากหลายเว็บไซต์โดยอัตโนมัติตามความต้องการของเรา
ในส่วนนี้เราจะพูดถึงไลบรารี Python ที่มีประโยชน์สำหรับการขูดเว็บ
คำขอ
มันเป็นไลบรารีการขูดเว็บหลามอย่างง่าย เป็นไลบรารี HTTP ที่มีประสิทธิภาพที่ใช้ในการเข้าถึงเว็บเพจ ด้วยความช่วยเหลือของRequestsเราสามารถรับ HTML ดิบของหน้าเว็บซึ่งสามารถแยกวิเคราะห์เพื่อดึงข้อมูลได้ ก่อนใช้requestsให้เราเข้าใจการติดตั้ง
การติดตั้งคำขอ
เราสามารถติดตั้งได้ทั้งในสภาพแวดล้อมเสมือนของเราหรือในการติดตั้งส่วนกลาง ด้วยความช่วยเหลือของpip คำสั่งเราสามารถติดตั้งได้ง่ายๆดังนี้ -
(base) D:\ProgramData> pip install requests
Collecting requests
Using cached
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Requirement already satisfied: idna<2.8,>=2.5 in d:\programdata\lib\sitepackages
(from requests) (2.6)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in
d:\programdata\lib\site-packages (from requests) (1.22)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\lib\sitepackages
(from requests) (2018.1.18)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in
d:\programdata\lib\site-packages (from requests) (3.0.4)
Installing collected packages: requests
Successfully installed requests-2.19.1
ตัวอย่าง
ในตัวอย่างนี้เรากำลังสร้างคำขอ GET HTTP สำหรับหน้าเว็บ สำหรับสิ่งนี้เราต้องนำเข้าไลบรารีคำขอก่อนดังนี้ -
In [1]: import requests
ในโค้ดบรรทัดต่อไปนี้เราใช้การร้องขอเพื่อส่งคำขอ GET HTTP สำหรับ url: https://authoraditiagarwal.com/ โดยการร้องขอ GET
In [2]: r = requests.get('https://authoraditiagarwal.com/')
ตอนนี้เราสามารถดึงเนื้อหาโดยใช้ไฟล์ .text คุณสมบัติดังนี้ -
In [5]: r.text[:200]
สังเกตว่าในผลลัพธ์ต่อไปนี้เรามีอักขระ 200 ตัวแรก
Out[5]: '<!DOCTYPE html>\n<html lang="en-US"\n\titemscope
\n\titemtype="http://schema.org/WebSite" \n\tprefix="og: http://ogp.me/ns#"
>\n<head>\n\t<meta charset
="UTF-8" />\n\t<meta http-equiv="X-UA-Compatible" content="IE'
Urllib 3
เป็นไลบรารี Python อื่นที่สามารถใช้ในการดึงข้อมูลจาก URL ที่คล้ายกับไฟล์ requestsห้องสมุด. คุณสามารถอ่านเพิ่มเติมได้ที่เอกสารทางเทคนิคที่https://urllib3.readthedocs.io/en/latest/.
การติดตั้ง Urllib3
ใช้ pip คำสั่งเราสามารถติดตั้ง urllib3 ไม่ว่าจะในสภาพแวดล้อมเสมือนของเราหรือในการติดตั้งส่วนกลาง
(base) D:\ProgramData>pip install urllib3
Collecting urllib3
Using cached
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Installing collected packages: urllib3
Successfully installed urllib3-1.23
ตัวอย่าง: การขูดโดยใช้ Urllib3 และ BeautifulSoup
ในตัวอย่างต่อไปนี้เรากำลังขูดหน้าเว็บโดยใช้ Urllib3 และ BeautifulSoup. เรากำลังใช้Urllib3ที่ตำแหน่งของไลบรารีคำขอสำหรับการรับข้อมูลดิบ (HTML) จากเว็บเพจ จากนั้นเราจะใช้BeautifulSoup สำหรับการแยกวิเคราะห์ข้อมูล HTML นั้น
import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
r = http.request('GET', 'https://authoraditiagarwal.com')
soup = BeautifulSoup(r.data, 'lxml')
print (soup.title)
print (soup.title.text)
นี่คือผลลัพธ์ที่คุณจะสังเกตเห็นเมื่อคุณเรียกใช้รหัสนี้ -
<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal
ซีลีเนียม
เป็นชุดทดสอบอัตโนมัติแบบโอเพ่นซอร์สสำหรับเว็บแอปพลิเคชันในเบราว์เซอร์และแพลตฟอร์มต่างๆ ไม่ใช่เครื่องมือเดียว แต่เป็นชุดซอฟต์แวร์ เรามีการผูกซีลีเนียมสำหรับ Python, Java, C #, Ruby และ JavaScript ที่นี่เราจะทำการขูดเว็บโดยใช้ซีลีเนียมและการผูก Python คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Java ซีลีเนียมที่ลิงค์ซีลีเนียม
การผูก Selenium Python มอบ API ที่สะดวกในการเข้าถึง Selenium WebDrivers เช่น Firefox, IE, Chrome, Remote เป็นต้นเวอร์ชัน Python ที่รองรับในปัจจุบันคือ 2.7, 3.5 ขึ้นไป
การติดตั้งซีลีเนียม
ใช้ pip คำสั่งเราสามารถติดตั้ง urllib3 ไม่ว่าจะในสภาพแวดล้อมเสมือนของเราหรือในการติดตั้งส่วนกลาง
pip install selenium
เนื่องจากซีลีเนียมต้องการไดรเวอร์เพื่อเชื่อมต่อกับเบราว์เซอร์ที่เลือกเราจึงจำเป็นต้องดาวน์โหลด ตารางต่อไปนี้แสดงเบราว์เซอร์ที่แตกต่างกันและลิงก์สำหรับการดาวน์โหลดเดียวกัน
Chrome |
https://sites.google.com/a/chromium.org/ |
Edge |
https://developer.microsoft.com/ |
Firefox |
https://github.com/ |
Safari |
https://webkit.org/ |
ตัวอย่าง
ตัวอย่างนี้แสดงการขูดเว็บโดยใช้ซีลีเนียม นอกจากนี้ยังสามารถใช้สำหรับการทดสอบซึ่งเรียกว่าการทดสอบซีลีเนียม
หลังจากดาวน์โหลดไดรเวอร์เฉพาะสำหรับเบราว์เซอร์เวอร์ชันที่ระบุเราจำเป็นต้องทำการเขียนโปรแกรมใน Python
ขั้นแรกต้องนำเข้า webdriver จากซีลีเนียมดังนี้ -
from selenium import webdriver
ตอนนี้ให้เส้นทางของโปรแกรมควบคุมเว็บที่เราดาวน์โหลดตามความต้องการของเรา -
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
ตอนนี้ให้ระบุ url ที่เราต้องการเปิดในเว็บเบราว์เซอร์นั้นตอนนี้ควบคุมโดยสคริปต์ Python ของเรา
browser.get('https://authoraditiagarwal.com/leadershipmanagement')
นอกจากนี้เรายังสามารถขูดองค์ประกอบเฉพาะโดยการจัดเตรียม xpath ตามที่ระบุไว้ใน lxml
browser.find_element_by_xpath('/html/body').click()
คุณสามารถตรวจสอบเบราว์เซอร์ที่ควบคุมโดยสคริปต์ Python สำหรับเอาต์พุต
Scrapy
Scrapy เป็นเฟรมเวิร์กการรวบรวมข้อมูลเว็บแบบโอเพนซอร์สที่รวดเร็วซึ่งเขียนด้วย Python ซึ่งใช้ในการดึงข้อมูลจากหน้าเว็บด้วยความช่วยเหลือของตัวเลือกตาม XPath Scrapy เปิดตัวครั้งแรกเมื่อวันที่ 26 มิถุนายน 2551 ได้รับอนุญาตภายใต้ BSD โดยมีการเปิดตัว 1.0 ในเดือนมิถุนายน 2558 โดยมีเครื่องมือทั้งหมดที่จำเป็นในการดึงประมวลผลและจัดโครงสร้างข้อมูลจากเว็บไซต์
การติดตั้ง Scrapy
ใช้ pip คำสั่งเราสามารถติดตั้ง urllib3 ไม่ว่าจะในสภาพแวดล้อมเสมือนของเราหรือในการติดตั้งส่วนกลาง
pip install scrapy
สำหรับการศึกษารายละเอียดเพิ่มเติมของ Scrapy คุณสามารถไปที่ลิงค์Scrapy