1

クローラーのアーキテクチャーの設計方法について混乱しています。

私は私が持っている検索を持っています

  1. ページネーション: 従うべき次のページのリンク
  2. 1 ページの製品リスト
  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)

問題は、2 つの return ステートメントがあることです。1 つは for request、もう 1 つは ですyield

クロール スパイダーでは最後yieldBaseSpider.

私は何をすべきか?

4

1 に答える 1

0

最初のパスとして (そして、これを自分でやりたいというコメントに基づいて)、CrawlSpider コードを見て、その機能を実装する方法を理解することをお勧めします。

于 2012-12-14T09:46:29.933 に答える