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'