Skip to content

เก็บข้อมูลเว็บด้วยวิธี web crawling ใน Python 3

สวัสดีทุกท่านครับ ในการรวบรวมข้อมูลบางอย่าง เช่น ข้อมูลเบอร์โทรศัพท์ เป็นต้น หากข้อมูลเหล่านั้นอยู่บนเว็บไซต์แล้วคุณต้องการข้อมูลนั้น คุณแค่คัดลอกมา แต่ถ้ามีข้อมูลจำนวนหลายหน้า คงไม่ไหวที่จะมานั่งคัดลอกเองแน่ บทความนี้จะพาผู้อ่านไปเก็บข้อมูลเว็บด้วยวิธี web crawling ใน Python 3

web crawling เป็น bot ชนิดหนึ่งที่อยู่บนอินเทอร์เน็ต ทำหน้าที่จัดทำดัชนีเว็บ มีอีกชื่อหนึ่งเรียกว่า Web spider   ในภาษา Python 3 ได้มีนักพัฒนาได้พัฒนาโมดูล web crawling ออกมา ผมขอแนะนำโมดูล Pomp ใช้งานง่าย และสามารถกำหนดเนื้อหาที่ต้องการได้ เป็น BSD license   ในการติดตั้งโมดูลนี้ ผมแนะนำให้ผู้อ่านโหลดโค้ดมาติดตั้งเองครับ จาก https://bitbucket.org/estin/pomp/downloads คลิก Download repository แล้วแตกไฟล์ เปิดคอมมาไลน์เข้าไปที่โฟลเดอร์ที่แตกไฟล์ไว้แล้วใช้คำสั่ง

python setup.py install

ดูเพิ่มเติมการติดตั้งโมดูลใน Python ตัวอย่างการใช้ web crawling ค้นหาคำว่า python จากเว็บ http://python.org/news

import re
from pomp.core.base import BaseCrawler

python_sentence_re = re.compile('[ws]{0,}python[sw]{0,}', re.I | re.M)

class MyCrawler(BaseCrawler):
    """Extract all sentences with `python` word"""
    ENTRY_REQUESTS = 'http://python.org/news'  # อ้างอิงหน้าเว็บที่ต้องการ crawl

    def extract_items(self, response):
        for i in python_sentence_re.findall(response.body.decode('utf-8')): # ถอดหน้าเว็บเป็น UTF 8
            item = i.strip()
            print(item)
            return item

    def next_requests(self, response):
        return None  # crawler เพจเดียว, แล้วหยุด crawl ต่อ

if __name__ == '__main__':
    from pomp.core.engine import Pomp
    from pomp.contrib.urllibtools import UrllibDownloader

    pomp = Pomp(
        downloader=UrllibDownloader(),
    )

    pomp.pump(MyCrawler())

ผลลัพธ์

python


ดึงข่าวสารจาก https://python.org/news/

ผลลัพธ์

อ่านเอกสารการใช้งานโมดูลได้ที่ https://pomp.readthedocs.org/ หน้าเว็บโมดูล pomp https://bitbucket.org/estin/pomp ติดตามบทความต่อไปนะครับ ขอบคุณครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *