2017-03-28 8 views
-1

サイトからすべてのページを掻き集めるのに少し問題があります。私は製品のすべての名前を壊すことができますが、私はあなたが下のコードで見ることができるようにstart_urlsに多くのURLを挿入する必要があります!私はすべてのWebページをスクラップしたいですが、xpathsをたくさん試しましたが、何か助けてもらえませんでしたか?開始URLにある1つのURLの全ページを掻き集めて

# -*- coding: utf-8 -*- 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from tutorial.items import Product 
from scrapy.linkextractors import LinkExtractor 
from scrapy.http import Request 
import scrapy 
import re 
class MySpider1(CrawlSpider): 
name = 'spider1'  # Nom du spider 
allowed_domains = ['sainsburys.co.uk'] 
start_urls=["http://www.sainsburys.co.uk/shop/gb/groceries/easter/", 
      #"http://www.sainsburys.co.uk/shop/gb/groceries/fruit-veg/" 
      #"http://www.sainsburys.co.uk/shop/gb/groceries/chilled-/" 
      ] 

rules = (
     Rule(LinkExtractor(restrict_xpaths='//div[@class="subNav"]//li'), follow=True), #Balise des catégories du site (Horrizontal) 
     Rule(LinkExtractor(restrict_xpaths='//div[@class="zdasFixedContent"]//li'), follow=True), 
     Rule(LinkExtractor(restrict_xpaths='//ul[@class="pages"]'), follow=True ,), 
     Rule(LinkExtractor(restrict_xpaths='//div[@class="productInfo"]'), follow=True , callback= 'parse_details'), 

     )`` 

def parse_details(self,response): 
    item = Product() 
    print response.url 
    print response.xpath('//p[@class="pricePerMeasure"]/text()').extract_first() 
    print response.xpath('//p[@class="pricePerUnit"]/text()').extract_first() 

    print "product---------------------------------------->" 

答えて

0

私はあなたがstart_requestsを使用する代わりに、start_urlsを使用するdicourageます。このメソッドは、spiderが起動するとすぐに呼び出されます。

def start_requests(self): 

    urls = ["http://www.sainsburys.co.uk/shop/gb/groceries/easter/", 
      #"http://www.sainsburys.co.uk/shop/gb/groceries/fruit-veg/" 
      #"http://www.sainsburys.co.uk/shop/gb/groceries/chilled-/" 
      ] 

    for url in urls: 

     yield Request(url=url, callback=self.parse_details) 

def parse_details(self, response): 
    item = Product() 
    item['link'] = response.url 
    item['price_1'] = response.xpath('//p[@class="pricePerMeasure"]/text()').extract_first() 
    item['price_2'] = response.xpath('//p[@class="pricePerUnit"]/text()').extract_first() 

    if next_link: 
     # recursively call this funtion again if we have more links to scrape 
     yield Request(url=next_link, callback=self.parse_details) 
+0

こんにちは@Umair!それを実行するために私にコード全体を教えてもらえますか? –

+0

何か助けてください??? –

+0

私はあなたのために100%作業コードを書くことができません...論理などを構築する際に助けが必要な場合は...私に教えてください – Umair

関連する問題