2017-05-14 58 views
-1

我正在嘗試爲電子商務網站構建一個簡單的scrapy爬蟲。Python Scrapy不解析所有項目

它遵循鏈接,似乎找到所有需要的XPath元素。但是,由於某種原因,它只能解析1200個項目而不是1531個項目,就像它有某種限制。 我試過切換選擇器,甚至模擬硒在下一頁點擊沒有成功。

這裏充滿履帶代碼:

import scrapy 
from scrapy.loader import ItemLoader 
from scrapy.crawler import CrawlerProcess 


class Product(scrapy.Item): 
    category=scrapy.Field() 
    price = scrapy.Field() 
    name = scrapy.Field() 


class ObiSpider(scrapy.spiders.CrawlSpider): 
    name = "obi_spider" 
    start_urls = ["https://www.obi.ru/vsyo-dlya-doma/lakokrasochnye-materialy/c/296"] 


    def parse(self, response): 
     for link in response.xpath("//ul[@class='first-level dashed']/li/a/@href").extract(): 
      yield scrapy.Request(response.urljoin(link), callback=self.parse_page) 


    def parse_page(self, response): 
     ans=response.xpath("//li[@class='product large']") 
     for prod in ans: 
      loader = ItemLoader(item=Product(), selector=prod) 
      loader.add_xpath('category', "//div[@class='head dashed selectable']/a/text()") 
      loader.add_xpath('name', ".//span[@class='description']/p/text()") 
      loader.add_xpath('price', ".//span[@class='price']/span/@data-csscontent") 
      yield loader.load_item() 
     path = response.xpath("//div[@id='PaginationLinks']/a/@href").extract() 
     for link in path: 
      if "?page" in link: 
       yield scrapy.Request(response.urljoin(link), callback=self.parse_page) 



process = CrawlerProcess() 
process.crawl(ObiSpider) 
process.start() 

任何幫助表示讚賞。提前致謝。

+0

請提供更多詳情:scrapy日誌是否顯示任何錯誤或非200響應代碼?如果是在這裏發佈日誌。還請檢查刮刀是否實際訪問了它應該訪問的所有頁面。 1200個聲音的偶數限制就像它在某個時候被阻擋了一樣(訪問了20頁,每個頁面有60個產品)並且無法訪問所有頁面。 – rrschmidt

回答

0

我認爲這不是你的蜘蛛問題 - 但在計算產品數量。 您可以在頁面上看到產品列表: enter image description here

某些產品有一些組合,但列表中有一個鏈接。 等: enter image description here