2017-05-14 10 views
-1

私は電子商取引サイト用の簡単なクローラを作成しようとしています。Python Scrapyがすべての項目を解析していません

リンクをたどり、XPathによって必要な要素がすべて見つかったようです。しかし何らかの理由で、何らかの種類の制限があるように、1531の代わりに1200項目を解析するだけです。 セレクタの切り替えや、セレンの次のページでのクリックのシミュレートを試みましたが、成功しませんでした。すべてのヘルプは高く評価され

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

詳細を記入してください:エラーまたは非200応答コードが表示されますか?はいの場合はここにログを投稿してください。スクレーパーが実際に訪れるべきすべてのページに実際に訪れたかどうか確認してください。 1200音の偶数の制限は、ある時点で(60の製品で20ページにアクセスした後)ブロックされ、すべてのページにアクセスできなかったようです。 – rrschmidt

答えて

0

私はそれがあなたのクモの問題ではないと思っていますが、製品の数を計算しています。 商品の一覧ページで見ることができます: enter image description here

一部の製品は、いくつかの組み合わせがありますが、リストに1つのリンクがあります。 など: enter image description here

関連する問題