diff --git a/docs/supported_publishers.md b/docs/supported_publishers.md index 622fe1fc..713b5211 100644 --- a/docs/supported_publishers.md +++ b/docs/supported_publishers.md @@ -1025,6 +1025,21 @@ + + + Bhaskar + + +
Dainik Bhaskar
+ + + + www.bhaskar.com + + +   +   + TimesOfIndia diff --git a/src/fundus/publishers/ind/__init__.py b/src/fundus/publishers/ind/__init__.py index c976615b..d2e72251 100644 --- a/src/fundus/publishers/ind/__init__.py +++ b/src/fundus/publishers/ind/__init__.py @@ -1,6 +1,7 @@ from fundus.publishers.base_objects import Publisher, PublisherGroup +from fundus.publishers.ind.bhaskar import BhaskarParser from fundus.publishers.ind.times_of_india import TimesOfIndiaParser -from fundus.scraping.url import NewsMap, RSSFeed +from fundus.scraping.url import NewsMap, RSSFeed, Sitemap class IND(metaclass=PublisherGroup): @@ -15,3 +16,10 @@ class IND(metaclass=PublisherGroup): RSSFeed("https://timesofindia.indiatimes.com/rssfeedmostrecent.cms"), ], ) + + Bhaskar = Publisher( + name="Dainik Bhaskar", + domain="https://www.bhaskar.com/", + parser=BhaskarParser, + sources=[NewsMap("https://www.bhaskar.com/sitemaps-v1--sitemap-google-news-index.xml")], + ) diff --git a/src/fundus/publishers/ind/bhaskar.py b/src/fundus/publishers/ind/bhaskar.py new file mode 100644 index 00000000..0a163dd8 --- /dev/null +++ b/src/fundus/publishers/ind/bhaskar.py @@ -0,0 +1,47 @@ +import datetime +import re +from typing import List, Optional, Pattern + +from lxml.etree import XPath + +from fundus.parser import ArticleBody, BaseParser, ParserProxy, attribute +from fundus.parser.utility import ( + extract_article_body_with_selector, + generic_author_parsing, + generic_date_parsing, + generic_topic_parsing, +) + + +class BhaskarParser(ParserProxy): + class V1(BaseParser): + _paragraph_selector = XPath("//article //p | //article //*[@style='border-bottom:none'] //li") + + _topic_bloat_pattern: Pattern[str] = re.compile(r"news", flags=re.IGNORECASE) + + @attribute + def body(self) -> ArticleBody: + return extract_article_body_with_selector( + doc=self.precomputed.doc, + paragraph_selector=self._paragraph_selector, + ) + + @attribute + def publishing_date(self) -> Optional[datetime.datetime]: + return generic_date_parsing(self.precomputed.ld.bf_search("datePublished")) + + @attribute + def authors(self) -> List[str]: + return generic_author_parsing(self.precomputed.ld.bf_search("author")) + + @attribute + def title(self) -> Optional[str]: + return self.precomputed.ld.bf_search("headline") + + @attribute + def topics(self) -> List[str]: + return [ + topic + for topic in generic_topic_parsing(self.precomputed.ld.bf_search("keywords")) + if not re.search(self._topic_bloat_pattern, topic) + ] diff --git a/tests/resources/parser/test_data/ind/Bhaskar.json b/tests/resources/parser/test_data/ind/Bhaskar.json new file mode 100644 index 00000000..b0ea58dd --- /dev/null +++ b/tests/resources/parser/test_data/ind/Bhaskar.json @@ -0,0 +1,28 @@ +{ + "V1": { + "authors": [ + "दैनिक भास्कर" + ], + "body": { + "summary": [], + "sections": [ + { + "headline": [], + "paragraphs": [ + "समस्तीपुर के बंगरा थाना क्षेत्र के रहीमाबाद गांव में 2 दिन पहले हुए मोहम्मद तबरेज के घर चोरी मामले का पुलिस ने बुधवार को खुलासा कर लिया है। पुलिस ने इस मामले में ताजपुर भेरोखड़ा गांव में छापेमारी कर चोरी का गहना आदि के साथ 2 बदमाशों को गिरफ्तार किया", + "गिरफ्तार बदमाश की पहचान ताजपुर थाना क्षेत्र के भेरोखड़ा गांव निवासी विद्यानंद तिवारी का बेटा संजीत कुमार और मोहम्मद इजराइल का बेटा मोहम्मद मुराद के रूप में की गई है। दोनों बदमाशों के पास से चोरी के जेवरात बरामद किए गए हैं।", + "ASP संजय पांडे ने संवाददाता सम्मेलन के दौरान जानकारी देते हुए बताया कि चोरी की घटना के बाद बंगरा थाना अध्यक्ष मनीषा कुमारी के नेतृत्व में SIT का गठन किया गया था। पुलिस ने तकनीकी और मानवीय सूचना के आधार पर भेरोखड़ा गांव में छापेमारी कर उक्त दोनों युवक को गिरफ्तार किया। उससे पूछताछ शुरू की तो इस चोरी कांड का खुलासा हो गया। पुलिस ने उसके घर से चोरी में गायब हुआ गहना और कुछ नगद राशि भी बरामद की। एसपी ने बताया कि दोनों बदमाश चोरी का गहना बेचने के फिराक में था। इसी दौरान पुलिस को भनक लग गई।", + "1 सितंबर की रात हुई थी चोरी", + "बता दें कि रहीमाबाद गांव निवासी मोहम्मद तबरेज 1 सितंबर को घर पर नहीं थे। इसी दौरान उनके घर में घुसकर बदमाशों ने गोदरेज का ताला काट कर एक लाख रुपए नगद के अलावा 10 लाख रुपए मूल्य से अधिक का गहना चोरी कर लिया था। चोरी की घटना के बाद पीड़ित परिवार द्वारा प्राथमिकी दर्ज कराई गई थी। प्राथमिकी दर्ज होने के बाद पुलिस ने इस मामले में अनुसंधान शुरू किया था।", + "ASP ने बताया कि अब गिरफ्तार दोनों बदमाश को जेल भेजा जा रहा है। छापेमारी टीम में थाना अध्यक्ष मनीषा कुमारी के अलावा अपर थाना अध्यक्ष प्रीति कुमारी, दरोगा राम अवधेश सिंह आदि पुलिस पदाधिकारी साथ में थे।" + ] + } + ] + }, + "publishing_date": "2024-09-04 16:20:35+05:30", + "title": "समस्तीपुर पुलिस ने 2 बदमाशों को पकड़ा: दो दिनों के अंदर चोरी कांड का किया खुलासा, गहना भी बरामद", + "topics": [ + "Samastipur police caught 2 miscreants" + ] + } +} diff --git a/tests/resources/parser/test_data/ind/Bhaskar_2024_09_04.html.gz b/tests/resources/parser/test_data/ind/Bhaskar_2024_09_04.html.gz new file mode 100644 index 00000000..ac3c63d4 Binary files /dev/null and b/tests/resources/parser/test_data/ind/Bhaskar_2024_09_04.html.gz differ diff --git a/tests/resources/parser/test_data/ind/meta.info b/tests/resources/parser/test_data/ind/meta.info index ec1dd553..af4959fc 100644 --- a/tests/resources/parser/test_data/ind/meta.info +++ b/tests/resources/parser/test_data/ind/meta.info @@ -1,4 +1,8 @@ { + "Bhaskar_2024_09_04.html.gz": { + "url": "https://www.bhaskar.com/local/bihar/samastipur/news/samastipur-police-caught-2-miscreants-133589711.html", + "crawl_date": "2024-09-04 12:50:44.805947" + }, "TimesOfIndia_2024_09_02.html.gz": { "url": "https://timesofindia.indiatimes.com/world/pakistan/anti-terror-op-turns-sinister-pakistani-netizens-being-walled-off-as-army-raises-spectre-of-digital-terrorism/articleshow/112898501.cms", "crawl_date": "2024-09-02 23:12:24.525515"