chandra chandra - 22 days ago 5
Python Question

Python- Beautifulsoup - extracting text

I need help in extracting the text from a news site in Hindi. One sample article link is: http://khabar.ndtv.com/news/india/happy-new-year-parties-in-delhi-344519

No of paragraphs in the news can change.

The only portion I want to extract from this article is:

दिल्ली में नए साल का जश्न का जमकर जश्न मनाया गया है। यहां पार्टियां तो शाम से ही शुरू हो गई थीं लेकिन जैसे ही घड़ी ने 12 बजाए तो नए साल के आने की खुशी में जमकर आतिशाबाजी भी हुई। इस दौरान दिल्ली के सारे शॉपिंग मॉल्स,पब और रेस्टोरेंट्स में लोगों की भीड़ रही।
दिल्ली में कई फॉर्म हाउसों में नए साल की शानदार पार्टियां आयोजित की गईं और इन पार्टियों में रूस और उज्बेकिस्तान से खासतौर पर बुलाई गईं बैले डांसर्स ने शानदार डांस पेश किया। पार्टियों में आए लोगों ने भी यहां जमकर मस्ती की।

HTML Code:



"<div class="ins_mainimage_big story_pic">
<span class="ins_storybody listmargin" itemprop="articleBody">
<div class="newins_widget_new highlights_wrap">
<div class="newins_widhead">
<h2>खास बातें</h2>
</div>
<div class="newins_widmid">
<div class="lhs_highlights">
<ol>
<li>दिल्ली में पार्टियां तो शाम से ही शुरू हो गई थीं लेकिन जैसे ही घड़ी ने 12 बजाए तो नए साल के आने की खुशी में जमकर आतिशाबाजी भी हुई।</li>
</ol>
</div>
</div>
</div>
<b>दिल्ली: </b>
दिल्ली में नए साल का जश्न का जमकर जश्न मनाया गया है। यहां पार्टियां तो शाम से ही शुरू हो गई थीं लेकिन जैसे ही घड़ी ने 12 बजाए तो नए साल के आने की खुशी में जमकर आतिशाबाजी भी हुई। इस दौरान दिल्ली के सारे शॉपिंग मॉल्स,पब और रेस्टोरेंट्स में लोगों की भीड़ रही।
<br>
दिल्ली में कई फॉर्म हाउसों में नए साल की शानदार पार्टियां आयोजित की गईं और इन पार्टियों में रूस और उज्बेकिस्तान से खासतौर पर बुलाई गईं बैले डांसर्स ने शानदार डांस पेश किया। पार्टियों में आए लोगों ने भी यहां जमकर मस्ती की।
<br>
<br>
<div style="clear: both;"></div>
<div id="z4a29a518-a84b-4d0a-8efa-0b6c5c48d297" style="display:none"></div>
</span>
<div class="tag_details firstpublising">
<br>
<i id="slider_bookmark">
<a target="_blank" href="http://khabar.ndtv.com/">
<b>Hindi News</b>
</a>
से जुड़े अन्य अपडेट लगातार हासिल करने के लिए हमें
<a target="_blank" href="https://www.facebook.com/NDTVIndia"> फेसबुक </a>
और
<a target="_blank" href="https://plus.google.com/111446795864124437665"> गूगल प्लस </a>
पर ज्वॉइन करें,
<a target="_blank" href="https://twitter.com/NDTVIndia"> ट्विटर </a>
पर फॉलो करे...
</i>
<br>
<div class="dateline">पहली बार प्रकाशन: जनवरी 1, 2012 09:27 AM IST </div>
</div>
</div>"





I tried:

mydivs = soup.findAll("div", { "class" : "ins_mainimage_big story_pic" })
for mydiv in mydivs:
print mydiv.text

mydivs = soup.findAll("span", { "class" : "ins_storybody listmargin" })
for mydiv in mydivs:
print mydiv.text


Output I am getting:
is mix of above text + some other text in Hindi which come from other tags+ some function defined in, I guess, javascript.

Answer

I hope this is what is required:

from bs4 import BeautifulSoup
import requests

html = requests.get('http://khabar.ndtv.com/news/india/happy-new-year-parties-in-delhi-344519').content

bsObj = BeautifulSoup(html, 'lxml')

data = bsObj.find('span', {'class': 'ins_storybody listmargin'})
data.div.decompose()
data.b.decompose()

data = data.get_text().strip()

pos = data.find('!function')

data = data[:pos]
print data

Hope this helps don't forget to up vote and accept

Comments