ความก้าวหน้าในการพัฒนา Web Crawler ด้วย Scrapy

15 Oct

จากผลของการที่ใช้ ทดลองใช้ Scrapy เมื่อคราวที่แล้ว เริ่มมั่นในและตัดสินใจว่าจะใช้ Scrapy เป็น Framework หลักในการพัฒนาตัว Web Crawler สำหรับการวิจัย

เว้นไปนานวันนี้เลยกลับมาต่องานที่ทำค้างไว้ เท่าที่ลองทำดูหากทำตามตัวอย่าง How-to ที่มีอยู่ใน Tutorial ของ Scrapy จะเจอ Error หลายๆ อย่างเลยทดสอบไปเรื่อย เริ่มเข้าใจมันมากขึ้นแล้ว

ผลมาลงตัวที่โค๊ดชุดนี้น่าจะเจอปัญหาน้อยสุด เลยบันทึกเอาไว้ก่อนหากเจอปัญหาอะไรจะได้ไม่ต้องเริ่มกันใหม่อีก

import scrapy
from TextMining.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "phisan"
    allowed_domains = [
        "phisan.sskru.ac.th",
        "health.kapook.com",
    ]

    start_urls = [
        "http://phisan.sskru.ac.th",
        "http://health.kapook.com/herb",
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            item = DmozItem()
            # item['title'] = sel.xpath('a/text()').extract()
            # item['desc'] = sel.xpath('text()').extract()
            item['link'] = sel.xpath('a/@href').extract()
            yield item

[update] วันนี้มีความก้าวหน้าอีกนิด เริ่มเข้าใจมากขึ้นกับตัว Selector เลยปรับโค๊ดใหม่อีกนิดเพื่อให้มันสามารลองรับกับ Selector ได้หลายๆ ตัวมากขึ้น

import scrapy
from TextMining.items import DmozItem

class DmozSpider(scrapy.Spider):
    name = "phisan"
    allowed_domains = [
        "phisan.sskru.ac.th",
        "health.kapook.com",
        "frynn.com",
    ]

    start_urls = [
        "http://phisan.sskru.ac.th",
        "http://health.kapook.com/herb",
        "http://frynn.com/herb",
        "http://frynn.com/%e0%b8%a3%e0%b8%b2%e0%b8%a2%e0%b8%8a%e0%b8%b7%e0%b9%88%e0%b8%ad%e0%b8%aa%e0%b8%a1%e0%b8%b8%e0%b8%99%e0%b9%84%e0%b8%9e%e0%b8%a3",
    ]

    def parse(self, response):
        selectors = [
            '//ul/li',
            '//tr/td',
            '//div',
        ]
        for selector in selectors:
            for sel in response.xpath(selector):
                item = DmozItem()
                item['title'] = sel.xpath('a/text()').extract()
                item['link'] = sel.xpath('a/@href').extract()
                if len(item['link']) != 0:
                    yield item

Social Comments

Loading Disqus Comments ...
Loading Facebook Comments ...