Number Web for Kindle(暫定)

Number Webをkindle化したcalibreレシピ。複数ページ対応。見栄えの調整未。

疲れたポイント

  • リダイレクトを使ってrssadから各記事にジャンプする

get_article_url()でopen_novisitで記事のURLを取得。ついでに広告ページを削除

  • 複数ページ対応

builtin_recipesに対応例があるので参照した。コメントを削除しないとゴミが残る

  • 構造の異なるページの対応(不完全)

NumberWebには少なくとも異なる4種類くらいの構造あり。全部に対応するにはこんな感じで苦労する。と思ったらremove_tags_after()複数設定可能だったんだw。後で再検討w

  • soupがあれば何でもできる

ここを読むと最低限の使い方がわかる。次ページへの削除が簡単にできたわw

  • その他メモ

index_to_soup()で2ページ目を取得しても汚いw。remove_tags()とか効いていないだろ。preprocess_html()の段階で1ページ目はregexとかremove_tagされてるんだな。

Yahoo pipeを使わなくてもだいぶんできるようになってきたw

レシピ

from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, Comment

class AdvancedUserRecipe1379701960(BasicNewsRecipe):    
    title          = u'Number Web'
    oldest_article = 7
    max_articles_per_feed = 100
#    auto_cleanup = True
    language       = 'ja'
    timefmt = ' [%Y-%m-%d (%a)]'
    simultaneous_downloads = 1

    remove_empty_feeds = True
    remove_tags_before = dict(id='article-img')
    remove_tags_after = dict(id='main-contents')


    remove_tags = [dict(name = 'div',attrs={'class':'service-menu clearfix'}),
                   dict(name = 'div',attrs={'id':'related-column'}),
                   dict(name = 'div',attrs={'id':'header-info'}),
                   dict(name = 'div',attrs={'id':'categorynavi'}),
                   dict(name = 'div',attrs={'id':'categorynavi2'}),
                   dict(name = 'div',attrs={'id':'gnavi'}),
                   dict(name = 'div',attrs={'id':'media-logo'}),
                   dict(name = 'div',attrs={'id':'img-caption'}),
                   dict(name = 'img',attrs={'id':'icon-zoom-in'}),
                   dict(name = 'img',attrs={'id':'icon-zoom-out'})
                   ]

#    preprocess_regexps= [(re.compile(u'<p><strong>\uff1c\u6b21\u30da\u30fc\u30b8\u3078\u7d9a\u304f\uff1e</strong></p>'), lambda m: '')]

#    match_regexps = [r'http://number.bunshun.jp/.*/$']
    cover_url       = 'http://numberstyle.ismedia-deliver.jp/common/images/v1/common/sitelogo.gif' 
    masthead_url       = 'http://numberweb.ismedia-deliver.jp/common/images/v1/common/companylogo.gif'

    feeds          = [(u'\u65b0\u7740\u30b3\u30e9\u30e0', u'http://feed.ismedia.jp/rss/number/rsscolumn')]

    def get_article_url(self,article):
        alink =  self.browser.open_novisit(article.link).geturl()
        if not alink.startswith('http://number.bunshun.jp'):
                return None
        else:
                return alink

    def append_page(self, soup, appendtag):
        nexturl= appendtag.find(attrs={'class':'next_p'})
        if nexturl:
            while nexturl:
                soup2 = self.index_to_soup(nexturl.a['href'], raw=False)
                nexturl=soup2.find(attrs={'class':'next_p'})
                pagetext = soup2.find(attrs={'id':'main-contents'})
                pos = len(appendtag.contents)
                pagetext.extract()
                appendtag.insert(pos, pagetext)

            #delte for multipages 
            for r in appendtag.findAll(attrs={'id':'mp-ie'}):
                r.extract()
            for r in appendtag.findAll(attrs={'class':'next-title'}):
                r.extract()
            for r in appendtag.findAll(text=u'\uff1c\u6b21\u30da\u30fc\u30b8\u3078\u7d9a\u304f\uff1e' ):
                r.parent.extract()
            for r in appendtag.findAll(text = lambda text: isinstance(text, Comment)):
                r.extract()

    def preprocess_html(self, soup):
        #delete for first page
        for r in soup.body.findAll(attrs={'id':'article-title'}):
#           print r.a    
            r.a.extract()
        

        self.append_page(soup, soup.body)

#       print soup

        return soup



  • 出来上がり

screenshot_2013_09_29T13_35_11 0900screenshot_2013_09_29T13_35_03 0900表紙出ずサイズ調整必要w

 

screenshot_2013_09_29T13_33_05 0900screenshot_2013_09_29T15_32_49 0900screenshot_2013_09_29T15_33_48 09004ページ目略w

screenshot_2013_09_29T15_34_39 0900screenshot_2013_09_29T13_34_44 0900言わせろナンバー未対応w

iPod touchではモバイル版(有料w)で見るべしw

Numberはmetaタグに情報が揃っているので、そこで取得して整形できないか検討中

次は原子力発電を考えるを勝手に書籍化してkindleに入れようと構想なう。ログイン必須です

カテゴリー: kindle タグ: パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中