编写一个爬虫使用BaseSpider在scrapy中解析一个站点

时间:2012-12-14 08:25:12

标签: python scrapy

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

我有搜索的地方

  1. 分页:下一页链接
  2. 一页上的产品列表
  3. 要抓取的各个链接以获取说明
  4. 我有以下代码:

    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)
    

    问题是我有两个return语句:一个用于request,另一个用于yield

    在抓取蜘蛛中,我不需要使用上一个yield,因此一切正常,但在BaseSpider我必须手动关注链接。

    我该怎么办?

1 个答案:

答案 0 :(得分:0)

作为初始传递(根据您对自己想要自己做的评论),我建议您查看CrawlSpider code以了解如何实现其功能。