2012-12-14 23 views
1

我對如何設計爬蟲的體系結構感到困惑。使用BaseSpider寫一個爬蟲來解析scrapy中的一個站點

我有,我有

  1. 分頁搜索:下一個頁面的鏈接跟隨
  2. 的產品之一頁
  3. 各個環節上的列表中被抓取,以獲得描述

我有以下代碼:

def parse_page(self, response): 
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//ol[@id=\'result-set\']/li') 
    items = [] 
    for site in sites[:2]: 

     item = MyProduct() 
     item['product'] = myfilter(site.select('h2/a').select("string()").extract()) 
     item['product_link'] = myfilter(site.select('dd[2]/').select("string()").extract()) 
     if item['profile_link']: 
         request = Request(urljoin('http://www.example.com', item['product_link']), 
         callback = self.parseItemDescription) 

     request.meta['item'] = item 
     return request 

    soup = BeautifulSoup(response.body) 
    mylinks= soup.find_all("a", text="Next") 
    nextlink = mylinks[0].get('href') 
    yield Request(urljoin(response.url, nextlink), callback=self.parse_page) 

問題是我有兩個返回語句:一個用於request,另一個用於yield

在抓取蜘蛛,我不需要使用最後yield,所以一切工作正常,但在BaseSpider我不得不手動跟蹤鏈接。

我該怎麼辦?

+0

我不明白這個問題。如果事情使用CrawlSpider工作,爲什麼你要使用BaseSpider? – Talvalin

+0

我坦率地說,我想使用BaseSpider,以便我編碼大部分的東西。 crawlspider會自動執行任何操作,並且在Spider基礎中,我會編寫代碼。只要你在這裏,它就很有趣。所以QUESTION是這個代碼的作品,當我從上面刪除'返回請求'行。我想知道如果我刪除返回語句,我的項目將通過管道保存 – user1858027

回答

0

作爲最初的通行證(並根據您的意見自行設計),我建議您查看CrawlSpider code以瞭解如何實現其功能。