2013-08-21 47 views
0

我有Scrapy下面的蜘蛛。我不僅需要刮掉我的站點地圖中的頂級頁面,還要抓取這些頁面的第一級子頁面。然後,我需要將父子分析方法中的子項的結果與正文項連接起來。任何人都可以幫我用代碼來做這樣的事情嗎?Scrapy兒童網頁,並在Scrapy中連接結果

from scrapy.contrib.spiders import SitemapSpider 
from scrapy.selector import HtmlXPathSelector 
from cvorgs.items import CvorgSite 

class CvorgSpider(SitemapSpider): 
    name = 'cvorg_spider' 
    sitemap_urls = ["http://www.urbanministry.org/cvorg_urls.xml"] 

    def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    item = CvorgSite() 
    item['url'] = response.url 
    item['title'] = hxs.select('//title/text()').extract() 
    item['meta'] = hxs.select('/html/head/meta[@name="description"]/@content').extract() 
    body = ' '.join(hxs.select('//body//p//text()').extract()) 
    item['body'] = body.replace('"', '\''); 
    return item 

回答

0

好,所以你需要像刮URL的數據,並重新再次刮它。 這裏您需要使用產量函數。 像我抓取郊區和重定向給一個新的網址。這裏例如在
回調= self.parse_category_tilte定義的函數,其中從輸出的 (complete_url(鏈接)功能會:

sites1 = hxs.select('//div[@class="left-column"]/div[@class="resultContainer"]/span/h2/a/@href') 
     items=[] 
     for sit in sites2: 
      link=sit.extract() 
      yield Request(complete_url(link), callback=self.parse_category_tilte) 

現在complete_url返回一個新的網址:

def complete_url(string): 
    """Return complete url""" 
    return "http://www.timeoutdelhi.net" + string 

現在在parse_category_tilte功能重新刮:

sites = hxs.select('//div[@class="box-header"]/h3/text()')  
     items=[] 
     for site in sites: 
      item=OnthegoItem() 
      item['ename']=site.extract() 
      items.append(item) 
     return items 

希望這可以幫助和upvote。:)

+0

我看到你的第一個代碼塊中的初始拼寫。但它看起來像你的第三個代碼塊(parse_category_tilte)創建一個新的項目爲刮擦的結果。我會如何得到刮的結果追加到原始父項目中的字段? 如果你可以幫忙解釋一下,那麼我將upvote你的答案。現在,我不確定它是否適用於我的用例。 –