cdhigh / KindleEar

Aggregates RSS and web content(Calibre recipe), sends to Kindle, and includes an e-ink optimized online reader.
http://cdhigh.github.io/KindleEar/
MIT License
2.73k stars 630 forks source link

The Economist不能使用官方封面,抓取文章图片不完整 #614

Closed haomuch closed 4 years ago

haomuch commented 4 years ago

用Calibre抓取的Economist是会显示官方封面,而且基本每篇文章开头都有配图,但是kindle ear首页订阅的economist使用的不是官方封面,而且文章开头的配图也没有了,请问是否因为kindle ear刻意忽略了这些图片呢?如果是的话,如何配置kindle ear可以完全抓取这些内容?

不过kindle ear好处在于杂志标注页面可以显示每篇文章的首段摘要,甚至包括了图片,Calibre反而缺失了这部分特别影响观感的内容,也想请教一下cdhigh,如何在calibre里配置抓取参数可以实现如同kindle ear一样的标注页面效果?

haomuch commented 4 years ago

Kindle Ear标注页显示效果: screenshot_2020_08_14T14_41_13+0800 Calibre标注页显示效果: screenshot_2020_08_14T14_41_25+0800 Kindle Ear正文显示效果: screenshot_2020_08_14T14_41_43+0800 Calibre正文显示效果: screenshot_2020_08_14T14_41_59+0800

cdhigh commented 4 years ago
  1. 如果要使用官方封面,则修改 books/Economist.py,将 coverfile = "cv_economist.jpg" 修改为 coverfile = getEconomistCover 然后定义一个获取每期的封面的顶级函数(写在Economist类外面)即可
    
    def getEconomistCover():
    opener = URLOpener()
    result = opener.open(cover_url) #cover_url需要你提供,我也不知道
    if result.status_code == 200 and result.content:
        return result.content
    else:
        raise Exception('xxxx')  #获取封面失败请抛出异常,让KindleEar使用默认封面,否则会导致无封面

除此之外,需要要使用自己定义的封面,则需要Economist单独投送(在订阅的时候选择separate)

2. 文章第一个图片消失则应该是“误杀”,因为KindleEar使用readability自动提取文章正文,剔除广告/导航/回复等不相干的内容,而文章第一副图在语义上类似于广告,所以误伤,不知新版本的readability有没有修正此问题。

3. 显示每篇文章的首段摘要是KindleEar专门提供的特性,不清楚Calibre有没有此特性。

**主要是因为KindleEar的Calibre升级到Python3有一定的工作量,我暂时没有兴趣和精力移植到Python3,而没有移植到Python3之前,更加没有动力在Python2的基础上修修补补,等什么时候我升级到Python3后可能会继续修补各种问题。**
haomuch commented 4 years ago
  1. 如果要使用官方封面,则修改 books/Economist.py,将 coverfile = "cv_economist.jpg" 修改为 coverfile = getEconomistCover 然后定义一个获取每期的封面的顶级函数(写在Economist类外面)即可
def getEconomistCover():
    opener = URLOpener()
    result = opener.open(cover_url) #cover_url需要你提供,我也不知道
    if result.status_code == 200 and result.content:
        return result.content
    else:
        raise Exception('xxxx')  #获取封面失败请抛出异常,让KindleEar使用默认封面,否则会导致无封面

除此之外,需要要使用自己定义的封面,则需要Economist单独投送(在订阅的时候选择separate)

  1. 文章第一个图片消失则应该是“误杀”,因为KindleEar使用readability自动提取文章正文,剔除广告/导航/回复等不相干的内容,而文章第一副图在语义上类似于广告,所以误伤,不知新版本的readability有没有修正此问题。
  2. 显示每篇文章的首段摘要是KindleEar专门提供的特性,不清楚Calibre有没有此特性。

主要是因为KindleEar的Calibre升级到Python3有一定的工作量,我暂时没有兴趣和精力移植到Python3,而没有移植到Python3之前,更加没有动力在Python2的基础上修修补补,等什么时候我升级到Python3后可能会继续修补各种问题。

非常感谢cd回复,今天发现calibre抓取的Forbes杂志也有文章摘要,如图:

screenshot_2020_08_17T14_53_57+0800

因此想请教一下Kindle Ear中显示文章摘要是通过什么代码实现的,我可以尝试移植到Economist的抓取代码中,谢谢!

cdhigh commented 4 years ago

Books/base.py LINE 725

      #提取文章内容的前面一部分做为摘要,[漫画模式不需要摘要]
        brief = u''
        if GENERATE_TOC_DESC and ((not user) or user.book_mode != 'comic'):
            for h in body.find_all(['h1','h2']): # 去掉h1/h2,避免和标题重复
                h.decompose()
            for s in body.stripped_strings:
                brief += unicode(s) + u' '
                if len(brief) >= TOC_DESC_WORD_LIMIT:
                    brief = brief[:TOC_DESC_WORD_LIMIT]
                    break
haomuch commented 4 years ago

感谢回复,但目前为止还没有移植成功,本人实在能力太弱。希望经过一段时间深入学习能够成功