Web Scraping คืออะไร?
Web Scraping เป็นระบบที่ดึงข้อมูลจากเว็บเพจส่วนที่ต้องการมาเรียกใช้งาน
เราสามารถทำ Web Scraping ด้วยภาษา Python โดยใช้ Lxml + requests ครับ
อ่านวิธีติดตั้ง Lxml ได้ที่ Python xml
โมดูล requests
requests เป็นโมดูลสำหรับงาน requests กับ HTTP โดยโมดูลนี้ถูกออกแบบให้ใช้งานได้กับมนุษย์ โดยหน้าที่คล้าย ๆ กับไลบรารี urllib ของ Python แต่ใช้งานได้สะดวกและง่ายกว่าครับ ใช้ License: Apache 2.0 รองรับทั้ง Python 2 และ 3 สามารถติดตั้งได้โดยใช้คำสั่ง pip:
pip install requests
หรือโหลดไฟล์บีบอัดจาก PyPI แตกไฟล์แล้วใช้คำสั่ง:
python setup.py install
ตัวอย่างการใช้งานโมดูล requests
[python]
>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}
[/python]
อ่านเอกสารการใช้งานโมดูล requests ได้ที่ http://docs.python-requests.org/en/latest/
เรามาลงมือทำ Web Scraping ด้วยภาษา Python กันครับ
ตอนแรกเรียกใช้งานโมดูล lxml กับ requests ก่อนครับ
[python]
>>> from lxml import html
>>> import requests
[/python]
ต่อไป ผมจะใช้โมดูล requests ดึงข้อมูลมาจากบล็อกผมเอง python3.wannaphong.com
[python]
>>> page = requests.get('https://python3.wannaphong.com')
>>> tree = html.fromstring(page.text) #เก็บค่าเอาไว้ในรูปแบบ html
[/python]
ผมต้องการดึงข้อมูล ชื่อบทความในหน้าหลัก ผมใช้ Opera เปิดโหมดนักพัฒนาขึ้นมา (สามารถใช้ web browser ไหนก็ได้ครับ แต่ควรเป็น web browser ที่มีโหมดนักพัฒนาครับ)
ผมลากตรงหัวข้อแล้วเปิดโหมดเรียกดูตรวจสอบองค์ประกอบโค้ดขึ้นมา จะเห็นได้ว่า ตรงชื่อบทความจะมีโค้ด html เป็น
[html]
<a href="..." rel="bookmark">ชื่อบทความ</a>
[/html]
เนื่องจากในบล็อกผมมีลิงค์หลายลิงค์ ทำให้อ้างอิงแค่ <a>
ไม่ได้ จึงต้องกำหนดคุณสมบัติของแท็กที่ต้องการดึงข้อมูล ผมอาศัยโค้ด rel="bookmark" จาก <a>
อ้างอิงชื่อบทความครับ ทำให้เขียน xpath ได้ดังนี้ //a[@rel="bookmark"]/
เรามาดึงข้อมูลส่วนที่ต้องการกันครับ
[python]
>>> q = tree.xpath('//a[@rel="bookmark"]/text()') #เติม text() เข้าไปเพื่อดึงข้อความ
>>> print("บทความ : ",q) #ข้อมูลจะออกมาเป็น list
บทความ : ['สร้างกราฟเส้นบน Python ด้วย matplotlib', 'สร้างกราฟด้วยโมดูล pyqtgraph', 'รับส่งข้อมูล json ผ่านเครือข่ายด้วย http.server', 'Python XML', 'Python กับ JSON', 'ปรึกษา ขอคำแนะนำ แก้ไขปัญหา Python ถามที่ไหนดี', 'urllib เข้าถึงอินเทอร์เน็ตใน Python 3']
[/python]
ติดตามบทความต่อไปนะครับ
ขอบคุณครับที่ติดตามมาโดยตลอดครับ ครบรอบ 200 บทความของบล็อกสอน Python 3 ภาษาไทย :D
ขอบคุณมาก ๆ ครับ :D
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)