以cochrane抓取recipe为例,谈谈recursions参数的作用

以cochrane抓取recipe为例,谈谈recursions参数的作用

 

           前面“ calibre抓取cochrance handbook的recipe”一文,用多卷的方式,实现了Cochrane Handbook for Systematic Reviews of Interventions电子书的抓取。其实,如果使用recursions参数,可以很方便地进行抓取,可以让工作更简化。
           同样使用如下recipe:
from calibre.web.feeds.recipes import BasicNewsRecipe
 
class Cochrane(BasicNewsRecipe):
 
   title = 'Cochrane'
   description = 'Cochrane Handbook for Systematic Reviews of Interventions'
   recursions = 0
       
   url_prefix = 'http://handbook.cochrane.org/'
   no_stylesheets = True
      
   def get_title(self, link):
      return link.contents[0].strip()
 
   def parse_index(self):
      front_soup = self.index_to_soup('http://handbook.cochrane.org/front_page.htm')
      articles = []
      link_coc = front_soup.findAll('p',{'style': "text-align: center;"},'a')
   
      for front_ln in link_coc:
         f_ln = front_ln.find('a')
         if not f_ln:
            continue
         front_til = self.get_title(f_ln)
         ln = self.url_prefix + f_ln['href']
         a = { 'title': front_til, 'url': ln }
         articles.append(a)
      ans=[('Cochrane Handbook for Systematic Reviews of Interventions',articles)]
      return ans

当recursions = 0时,抓取后生成的epub文件,结构如下图:
以cochrane抓取recipe为例,谈谈recursions参数的作用
feed_0文件夹为
以cochrane抓取recipe为例,谈谈recursions参数的作用
其中index.html打开为
以cochrane抓取recipe为例,谈谈recursions参数的作用
           一个标题分别对应feed_0-feed_4五个文件夹,每个文件夹内为本章的页面,如果打开,则发现点击不了,或者是外部链接。显然,每章的内容没有递归下载下来。
打开article_0,文件夹内有:
以cochrane抓取recipe为例,谈谈recursions参数的作用

现在,同样是这个recipe,只把recursions = 1时,抓取后生成的epub文件,结构如下图:
以cochrane抓取recipe为例,谈谈recursions参数的作用
打开feed_0,文件夹内有:
以cochrane抓取recipe为例,谈谈recursions参数的作用
打开article_0,文件夹内有:
以cochrane抓取recipe为例,谈谈recursions参数的作用
注意,这里多了子文件夹links
打开links文件夹,内有
以cochrane抓取recipe为例,谈谈recursions参数的作用
             正是每一部分中about章节的内容。也即递归下载了每一部分的章节内容。每一个article文件夹下都多了一个link子文件夹,都是递归下载的章节内容。
             可见,只要我们恰当地设置好递归参数,就可以方便地下载我们所需要的层级的内容,而不用费很大的力气去编写程序了。当然,目录结构等细节上有所不同。

       学习recipe的API接口中的参数设置,因为没有阅读源代码(即使读了BasicNewsRecipe类的源码,因为调用的许多类并不清楚,也很难完全弄明白),这种尝试设置,是一种有益地学习方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值