Vấn đề khi sử dụng Scrapy

Chào các bác, em có vấn đề này, bác nào có kiến thức về Scrapy vui lòng chỉ giáo giúp em với.

Ý tưởng của em là Crawl dữ liệu từ Lazada.

Cuối hàm Parse_item_lazada, sau khi bóc tách xong dữ liệu thì lấy tất cả url có trong page cho vào 1 database và sau đó gọi hàm start_requests để tiếp tục càn quét.

Tuy nhiên cái vấn đề là hàm start_requests (ở cuối cùng) không gọi được. Mấy chỗ print đấy là em viết để check xem có ra được không.

Theo em tìm hiểu thì có cách khác để làm, nhưng em buộc phải cấu trúc như thế này để còn phát triển sang một số website khác nữa. Bởi vậy các bác xem tư vấn giúp em cách khắc phục lỗi này như thế nào với ạ.

class SosankaCrawl(CrawlSpider):
name = 'sosanka'

start_urls = [
    'http://www.lazada.vn',
]

def start_requests(self):

    print 'AAAAAAAAAAAABBBBBBBBBBBCCCCCCCCCCCCC'
    urls = self.MyS.Get_url_phai_crawl()
    print 'ZXZZZZZZZZZZZZZZZZZZXXXXXXXX'

    if len(urls) == 0:
        urls = self.start_urls
        for url in urls:
            if self.myF.URL_getdomain(url) == 'www.lazada.vn' :
                yield scrapy.Request(url=url, callback=self.parse_item_lazada)
    else:
        for url in urls:
            if self.MyS.IsUrlDuocCrawl(url): #Nếu Url được crawl
                if self.myF.URL_getdomain(url) == 'www.lazada.vn' :
                    yield scrapy.Request(url=url, callback=self.parse_item_lazada)

def parse_item_lazada(self, response):
        self.Laz = lazada()  # hàm bóc tách dữ liệu từ website lazada

        if self.Laz.urlIsProduct(response.url):

            self.Laz.Sel = response.xpath('//div[@id="prd-detail-page"]/div')
            item = SosankaItem()
            item['name'] = self.Laz._getProName()
            item['stock'] = self.Laz._getProStock()
            item['price'] = self.Laz._getProPriceValue()
            item['currency'] = self.Laz._getProCurrency()
            item['image'] = self.Laz._getProImage()
            item['seller1'] = self.Laz._getProSeller1()
            item['url'] = self.Laz._getProUrl(response.url, self.Laz.const['domain'], self.Laz.const['url_product'],self.Laz.const['date_space_product'])

            yield item

        else:
            self.Laz.insertUrlNoproduct(response.url)
            url_in_page = self.Laz.getAllLinkinpage(response)

            for url in url_in_page:
                print 'AAA' + url
                if self.MyS.IsUrlchuaco(url):  # Nếu Url được crawl
                    print url
                    self.MyS.insertUrlchuaCrawl(url)

        print 'CCCCCCCCCCCCCCCC'
        self.start_requests() #ở đây không thể gọi được hàm này để chạy
        print 'MMMMMMMMMMMMMMMMMMMM'

Chạy tới đâu thì đứng?

Em setup chạy ngày này qua ngày khác luôn bác ạ. Bao giờ em mệt thì em bấm exit cho dừng để nghỉ ạ :slight_smile:

Cho xem một output được không. Mơ hồ quá.

Bạn xuất dữ liệu ra rồi thì nó gọi làm sao được code phía dưới?

2 Likes

Này đúng rồi nè :smile:.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?