রেন্ডারযুক্ত সামগ্রী পেতে আমি বিউটিফুল স্যুপ ব্যবহার করে সম্পূর্ণ সম্মান করি তবে এটি কোনও পৃষ্ঠায় রেন্ডার করা সামগ্রী অর্জনের জন্য আদর্শ প্যাকেজ হতে পারে না।
রেন্ডার করা সামগ্রী বা একটি সাধারণ ব্রাউজারে দৃশ্যমান সামগ্রী পেতে আমার একইরকম সমস্যা হয়েছিল। বিশেষত আমার নীচে এমন একটি সাধারণ উদাহরণ সহ কাজ করার জন্য অনেকগুলি সম্ভবত এপিপিকাল কেস ছিল। এক্ষেত্রে ডিসপ্লেযোগ্যযোগ্য ট্যাগটি স্টাইল ট্যাগে বাসা বেঁধে দেওয়া হয় এবং আমি যাচাই করে দেখেছি এমন অনেক ব্রাউজারে এটি দৃশ্যমান নয়। অন্যান্য বৈচিত্রগুলি যেমন কারও কাছে শ্রেণি ট্যাগ সেটিং প্রদর্শনকে সংজ্ঞায়িত করার মতো উপস্থিত রয়েছে। তারপরে ডিভের জন্য এই ক্লাসটি ব্যবহার করে।
<html>
<title> Title here</title>
<body>
lots of text here <p> <br>
<h1> even headings </h1>
<style type="text/css">
<div > this will not be visible </div>
</style>
</body>
</html>
উপরে পোস্ট করা একটি সমাধান হ'ল:
html = Utilities.ReadFile('simple.html')
soup = BeautifulSoup.BeautifulSoup(html)
texts = soup.findAll(text=True)
visible_texts = filter(visible, texts)
print(visible_texts)
[u'\n', u'\n', u'\n\n lots of text here ', u' ', u'\n', u' even headings ', u'\n', u' this will not be visible ', u'\n', u'\n']
এই সমাধানটিতে অবশ্যই অনেক ক্ষেত্রে অ্যাপ্লিকেশন রয়েছে এবং কাজটি সাধারণত বেশ ভালভাবে সম্পাদন করে তবে উপরে পোস্ট করা এইচটিএমএলটিতে রেন্ডার করা হয়নি এমন পাঠ্যটি ধরে রেখেছে। অতএব অনুসন্ধানের পরে বেশ কয়েকটি সমাধান এখানে এসেছিল বিউটিফুলসৌপ get_text সমস্ত ট্যাগ এবং জাভাস্ক্রিপ্ট স্ট্রিপ করে না এবং এখানে পাইথন ব্যবহার করে সরল পাঠ্যে এইচডিএমএল রেন্ডার করা হয়েছে
আমি এই উভয় সমাধানের চেষ্টা করেছি: html2text এবং nltk.clean_html এবং সময় ফলাফল দেখে অবাক হয়েছি তাই ভেবেছিল তারা উত্তরসূরির জন্য একটি উত্তর নিশ্চিত করে। অবশ্যই, গতিটি ডেটা সামগ্রীর উপর নির্ভর করে ...
@ হেলজ থেকে এখানে একটি উত্তর ছিল সমস্ত কিছুর nltk ব্যবহার সম্পর্কে।
import nltk
%timeit nltk.clean_html(html)
was returning 153 us per loop
এটি রেন্ডার এইচটিএমএল সহ একটি স্ট্রিং ফিরিয়ে দিতে সত্যিই ভাল কাজ করেছে। এই এনএলটিকি মডিউলটি এইচটিএমএল 2 টেক্সটের চেয়েও দ্রুত ছিল, যদিও সম্ভবত এইচটিএমএল 2 টেক্সট আরও শক্তিশালী।
betterHTML = html.decode(errors='ignore')
%timeit html2text.html2text(betterHTML)
%3.09 ms per loop
soup.findAll(text=True)
বৈশিষ্ট্যটি সম্পর্কে কখনও জানতেন না