mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 18:54:09 -04:00
Merge branch 'master' of https://github.com/unkn0w7n/calibre
This commit is contained in:
commit
d796c0a618
@ -1,92 +0,0 @@
|
||||
'''
|
||||
www.business-standard.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe, classes
|
||||
|
||||
|
||||
class BusinessStandard(BasicNewsRecipe):
|
||||
title = 'Business Standard | Print Edition'
|
||||
__author__ = 'unkn0wn'
|
||||
description = "India's most respected business daily"
|
||||
no_stylesheets = True
|
||||
use_embedded_content = False
|
||||
encoding = 'utf-8'
|
||||
publisher = 'Business Standard Limited'
|
||||
category = 'news, business, money, india, world'
|
||||
language = 'en_IN'
|
||||
extra_css = '''
|
||||
.article__desc{font-size:small;}
|
||||
.article_image{font-size:small; font-style:italic;}
|
||||
.article__dateline{font-size:small;}
|
||||
.full-img{font-size:small; font-style:italic; text-align:center;}
|
||||
.pubDate{font-size:small; text-align:center;}
|
||||
'''
|
||||
|
||||
masthead_url = 'https://bsmedia.business-standard.com/include/_mod/site/html5/images/business-standard-logo.png'
|
||||
|
||||
def get_cover_url(self):
|
||||
soup = self.index_to_soup(
|
||||
'https://www.magzter.com/IN/Business-Standard-Private-Ltd/Business-Standard/Newspaper/'
|
||||
)
|
||||
for citem in soup.findAll(
|
||||
'meta', content=lambda s: s and s.endswith('view/3.jpg')
|
||||
):
|
||||
return citem['content']
|
||||
|
||||
remove_attributes = ['width', 'height', 'style']
|
||||
|
||||
keep_only_tags = [
|
||||
classes(
|
||||
'article__title article__content article_content article_image article__dateline headline'
|
||||
' alternativeHeadline full-img article-content__img pubDate'
|
||||
),
|
||||
dict(name='section', attrs={'subscriptions-section': 'content'}),
|
||||
dict(name='span', attrs={'class': 'p-content'})
|
||||
]
|
||||
remove_tags = [
|
||||
classes('also-read-panel related-keyword more-stories-pagination'),
|
||||
dict(name='br')
|
||||
]
|
||||
|
||||
def parse_index(self):
|
||||
soup = self.index_to_soup('https://www.business-standard.com/todays-paper')
|
||||
ans = self.bs_parse_index(soup)
|
||||
return ans
|
||||
|
||||
def bs_parse_index(self, soup):
|
||||
feeds = []
|
||||
div = soup.find('div', attrs={'class': 'main-cont-left'})
|
||||
for section in div.findAll('div', attrs={'class': 'row-inner'}):
|
||||
h2 = section.find('h2')
|
||||
secname = self.tag_to_string(h2)
|
||||
self.log(secname)
|
||||
articles = []
|
||||
for a in section.findAll(
|
||||
'a', href=lambda x: x and x.startswith('/article/')
|
||||
):
|
||||
url = a['href'].replace('article', 'article-amp')
|
||||
url = 'https://wap.business-standard.com' + url
|
||||
title = self.tag_to_string(a).strip().replace('Premium Content', '')
|
||||
articles.append({'title': title, 'url': url})
|
||||
self.log('\t', title, '\n\t\t', url)
|
||||
if articles:
|
||||
feeds.append((secname, articles))
|
||||
return feeds
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
subs = soup.find('section', attrs={'subscriptions-section': 'content'})
|
||||
if subs:
|
||||
art = soup.find(**classes('article_image'))
|
||||
if art:
|
||||
art.extract()
|
||||
div = soup.find(**classes('article_content'))
|
||||
if div:
|
||||
div.extract()
|
||||
h2 = soup.find('h2')
|
||||
if h2:
|
||||
h2.name = 'h4'
|
||||
for img in soup.findAll('amp-img', src=True):
|
||||
img.name = 'img'
|
||||
img['src'] = img['src'].replace('\\', '').split('?')[0]
|
||||
return soup
|
Binary file not shown.
Before Width: | Height: | Size: 1000 B |
@ -1,87 +0,0 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe, classes
|
||||
from collections import defaultdict
|
||||
|
||||
|
||||
class IndianExpressPrint(BasicNewsRecipe):
|
||||
title = u'Indian Express | Print Edition'
|
||||
language = 'en_IN'
|
||||
__author__ = 'unkn0wn'
|
||||
masthead_url = 'https://indianexpress.com/wp-content/themes/indianexpress/images/indian-express-logo-n.svg'
|
||||
no_stylesheets = True
|
||||
use_embedded_content = False
|
||||
remove_attributes = ['style', 'height', 'width']
|
||||
ignore_duplicate_articles = {'url'}
|
||||
|
||||
extra_css = '''
|
||||
#storycenterbyline {font-size:small;}
|
||||
#img-cap {font-size:small;}
|
||||
blockquote{color:#404040;}
|
||||
em{font-style:italic; color:#202020;}
|
||||
#sub-d{color:#202020; font-style:italic;}
|
||||
.ie-authorbox{font-size:small;}
|
||||
'''
|
||||
|
||||
resolve_internal_links = True
|
||||
remove_empty_feeds = True
|
||||
|
||||
keep_only_tags = [classes('heading-part full-details')]
|
||||
remove_tags = [
|
||||
dict(name='div', attrs={'id': 'ie_story_comments'}),
|
||||
dict(name='div', attrs={'class': lambda x: x and 'related-widget' in x}),
|
||||
dict(name='img', attrs={'src':lambda x: x and x.endswith('-button-300-ie.jpeg')}),
|
||||
dict(name='a', attrs={'href':lambda x: x and x.endswith('/?utm_source=newbanner')}),
|
||||
classes(
|
||||
'share-social appstext ie-int-campign-ad ie-breadcrumb custom_read_button unitimg copyright'
|
||||
' storytags pdsc-related-modify news-guard premium-story append_social_share'
|
||||
' digital-subscriber-only h-text-widget ie-premium ie-first-publish adboxtop adsizes immigrationimg'
|
||||
'next-story-wrap ie-ie-share next-story-box brand-logo quote_section ie-customshare'
|
||||
' custom-share o-story-paper-quite ie-network-commenting audio-player-tts-sec'
|
||||
)
|
||||
]
|
||||
|
||||
def parse_index(self):
|
||||
soup = self.index_to_soup('https://indianexpress.com/todays-paper/')
|
||||
feeds_dict = defaultdict(list)
|
||||
div = soup.find('div', attrs={'class':'today-paper'})
|
||||
for a in div.findAll('a', attrs={'href':lambda x: x and x.startswith(
|
||||
('https://indianexpress.com/article/', 'https://indianexpress.com/elections/')
|
||||
)}):
|
||||
if not a.find('img'):
|
||||
url = a['href']
|
||||
title = self.tag_to_string(a)
|
||||
section = 'Front Page'
|
||||
if str := a.findParent('strong'):
|
||||
if span := str.find_previous_sibling('span'):
|
||||
section = self.tag_to_string(span)
|
||||
# if 'City' in section:
|
||||
# url = ''
|
||||
if not url or not title:
|
||||
continue
|
||||
self.log(section, '\n\t', title, '\n\t\t', url)
|
||||
feeds_dict[section].append({"title": title, "url": url})
|
||||
return [(section, articles) for section, articles in feeds_dict.items()]
|
||||
|
||||
def get_cover_url(self):
|
||||
soup = self.index_to_soup(
|
||||
'https://www.magzter.com/IN/The-Indian-Express-Ltd./The-Indian-Express-Mumbai/Newspaper/'
|
||||
)
|
||||
for citem in soup.findAll('meta', content=lambda s: s and s.endswith('view/3.jpg')):
|
||||
return citem['content']
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
h2 = soup.find('h2')
|
||||
if h2:
|
||||
h2.name = 'p'
|
||||
h2['id'] = 'sub-d'
|
||||
for span in soup.findAll(
|
||||
'span', attrs={'class': ['ie-custom-caption', 'custom-caption']}
|
||||
):
|
||||
span['id'] = 'img-cap'
|
||||
for img in soup.findAll('img'):
|
||||
noscript = img.findParent('noscript')
|
||||
if noscript is not None:
|
||||
lazy = noscript.findPreviousSibling('img')
|
||||
if lazy is not None:
|
||||
lazy.extract()
|
||||
noscript.name = 'div'
|
||||
return soup
|
Loading…
x
Reference in New Issue
Block a user