1

我对如何设计爬虫的架构感到困惑。

我有我有的搜索

  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)

问题是我有两个返回语句:一个 for request,一个 for yield

在爬虫中,我不需要使用 last yield,所以一切正常,但BaseSpider我必须手动跟踪链接。

我应该怎么办?

4

1 回答 1

0

作为初始阶段(并基于您对自己想要执行此操作的评论),我建议您查看CrawlSpider 代码以了解如何实现其功能。

于 2012-12-14T09:46:29.933 回答