4 เมษายน 2558

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

ทำ Web Crawler ง่าย ๆ ด้วย pyspider ใน Python

สวัสดีผู้อ่านทุกท่านครับ ผู้อ่านคงเคยคัดลอกข้อความต่าง ๆ จากเว็บไซต์ใช่ไหมครับ ด้วยการคัดลอกแล้ววาง แต่อาจผู้อ่านต้องการคัดลอกข้อความหรือดึงข้อมูลต่าง ๆ หากมีเนื้อหาจำนวนหลายร้อยหน้าหรือเป็นแสนหน้า คงยากที่จะต้องได้หมดในเวลาที่จำกัด เพราะเหตุจึงมีการทำ Bot เพื่อรวบรวมข้อมูลจากเว็บไซต์ที่กำหนด เราเรียก Bot นั้นว่า "Web Crawler" ตัวอย่าง Web Crawler ที่เราเห็นได้ทั่งไปนั้นคือ Google Crawler ครับ บทความนี้จะพาผู้อ่านไปทำ Web Crawler ง่าย ๆ ด้วย pyspider ใน Python กันครับ

ไลบรารีที่ผมจะขอแนะนำในบทความนี้คือ ไลบรารี pyspider ครับ เป็นไลบรารีหนึ่งที่สามารถเป็น  Web Crawle ได้ครับ

  • Python 2&3
  • รองรับฐานข้อมูล MySQL, MongoDB, SQLite, PostgreSQL
  • มีหน้า WebUI พร้อมป้อนคำสั่งโค้ดการทำงาน, task monitor, project manager and result viewer
  • ใช้ Apache License Version 2.0

สามารถติดตั้งได้โดยใช้คำสั่ง pip ดังนี้ครับ
pip install pyspider

แล้วเรียกใช้งานได้โดยสั่ง pyspider แล้วเข้าไปยัง http://localhost:5000/ ครับ

แล้วลองเล่นโค้ดใส่ในหน้ารับโค้ดคำสั่งครับ

[python]
from pyspider.libs.base_handler import *

class Handler(BaseHandler):
crawl_config = {
}

@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page) #กำหนดเว็บไซต์ที่ต้องการไปดึงข้อมูล

@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)

def detail_page(self, response):
return {
"url": response.url, #ดึงที่อยู่ลิงค์ภายในเว็บที่กำหนด
"title": response.doc('title').text(), #ดึงข้อมูลภายในเว็บที่กำหนด
}
[/python]

ผลลัพธ์

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

ลองเล่น pyspider ได้ที่ demo.pyspider.org
อ่านเอกสารการใช้งาน Web Crawler ด้วย pyspider  ได้ที่ docs.pyspider.org/en/latest//
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

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

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