爬行

2014-01-27 61 views
3

Scrapy嵌套頁我與嵌套頁爬行掙扎。爬行

我只得到了項目以作爲第一抓取的頁面項目計數。

網站的結構會是這樣。

  1. 抓取品牌 - 品牌鏈接
  2. 使用品牌鏈接去抓取模型和模型鏈接
  3. 使用型號鏈接去抓取特定的公告和它的屬性。

假設品牌A有2個型號,第一個型號有11個公告,第二個型號有9個.B品牌有3個型號,每個型號有5個公告。

在上面的例子我需要獲得各個公告爲單獨的項目(共35個),但代替的是我得到物品號碼作爲品牌等品牌A與第一公告,然後用第一次公告B品牌。

class SiteSpider(CrawlSpider): 
log.start(logfile="log.txt", loglevel="DEBUG", logstdout=None) 
name = "site" 
#download_delay = 2 
allowed_domains = ['site.com'] 
start_urls = ['http://www.site.com/search.php?c=1111'] 
items = {} 


def parse(self, response): 
    sel = Selector(response) 
    #requests =[] 
    brands = sel.xpath("//li[@class='class_11']") 
    for brand in brands: 
     item = SiteItem() 
     url = brand.xpath('a/@href')[0].extract() 
     item['marka'] = brand.xpath("a/text()")[0].extract() 
     item['marka_link'] = brand.xpath('a/@href')[0].extract() 
     request = Request("http://www.site.com"+url,callback=self.parse_model, meta={'item':item}) 
     # requests.append(request) 
     # 
     yield request 

def parse_model(self, response): 
    sel = Selector(response) 
    models = sel.xpath("//li[@class='class_12']") 
    for model in models: 

     item = SiteUtem(response.meta["item"]) 
     url2 = model.xpath('a/@href')[0].extract() 
     item ['model'] = model.xpath("a/text()")[0].extract() 
     item ['model_link'] = url2 

    return item 

你能幫助這個noobie用僞代碼來實現嗎?我猜想我在基礎層面犯了一個錯誤。

+0

嗨保羅, 謝謝你的關心。我添加了我試圖實現的代碼。 我做它一步一步的做法,因爲我是新來的Python和scrapy。 在第一個解析函數中,我試圖獲得品牌和品牌的鏈接。我能夠做到這一點,並獲得品牌的完整列表。但訣竅是它會將品種數量作爲品牌數量。 它看起來像我想實現算法的問題。 – ielapoc

回答

5

parse_model你有一個項目創建一個循環,但沒有產生他們,試圖將其改爲:

def parse_model(self, response): 
    sel = Selector(response) 
    models = sel.xpath("//li[@class='class_12']") 
    for model in models: 

     item = SiteUtem(response.meta["item"]) 
     url2 = model.xpath('a/@href')[0].extract() 
     item ['model'] = model.xpath("a/text()")[0].extract() 
     item ['model_link'] = url2 

     yield item 
+0

感謝您的幫助:) – ielapoc