mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -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