20 เมษายน 2558

Published เมษายน 20, 2558 by with 0 comment

ทำ Web Scraping ด้วยภาษา Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปแนะนำการทำ web scraping ด้วยภาษา Python กันครับ

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 ที่มีโหมดนักพัฒนาครับ)

ทำ Web Scraping ด้วย Python

ผมลากตรงหัวข้อแล้วเปิดโหมดเรียกดูตรวจสอบองค์ประกอบโค้ดขึ้นมา จะเห็นได้ว่า ตรงชื่อบทความจะมีโค้ด 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 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)