एक लेख BeautifulSoup से पाठ प्राप्त करें

मेरे पास एक साधारण पायथन प्रोग्राम है जो एक यूआरएल के अंदर एक खोजशब्द की खोज करता है और सत्य या गलत देता है। मैं इसे संशोधित करना चाहता हूं, इसलिए मैं केवल लेख के अंदर खोजता हूं, शीर्षक नहीं, वेबपृष्ठ या विज्ञापनों या अन्य लेखों के आसपास अन्य सामान नहीं। आदि। मेरे पास सैकड़ों यूआरएल जांचने के लिए हैं और उनके पास एक ही शैली नहीं है (i अनुमान लगाओ, उन सभी की जांच नहीं की है लेकिन इसकी थोड़ी स्पष्ट है)। अगर ऐसा भी हो तो मैं ऐसा कुछ कैसे कर सकता हूं? सुंदर सूप का उपयोग पहली बार।

यहां मैं अभी उपयोग कर रहा हूं

import re
import sys
from BeautifulSoup import BeautifulSoup
import urllib2

#argecho.py

content = urllib2.open(sys.argv[1]).read()

print sys.argv[2] in content # -> True

मैं यूआरएल और कीवर्ड को तर्क के रूप में भेजता हूं क्योंकि मेरे पास सैकड़ों यूआरएल के लिए यह एक और स्क्रिप्ट है।

0
मुझे लगता है कि mbowden का अधिकार - आपको उन वेबसाइटों की संरचना के बारे में अधिक कहने में सक्षम होना चाहिए जिन्हें आप पार्स करना चाहते हैं। क्या वह प्रासंगिक डेटा है जिसे आप किसी विशेष प्रकार के टैग में अपने कीवर्ड के लिए स्कैन करना चाहते हैं? क्या ऐसा कुछ है जो प्रासंगिक डेटा को अप्रासंगिक मेटाडेटा (जैसे लेख शीर्षक) से विभाजित करता है?
जोड़ा लेखक duhaime, स्रोत
मैंने पुनर्विचार के लिए मेरी टिप्पणी हटा दी। प्रत्येक संरचना अलग होगी। सुंदर सूप आपके लिए टैग द्वारा वेबपृष्ठ को मजबूती से तोड़ देगा। लेकिन आपको यह जानना होगा कि आप क्या चाहते हैं। यदि यह लिंक, या छवियों, या अनुच्छेद यह सीधा है, अन्यथा ...
जोड़ा लेखक mbowden, स्रोत

3 उत्तर

आप नियमित अभिव्यक्ति में sys.argv [2] को परिवर्तित करके, सुंदर सूप के साथ बॉडी टेक्स्ट बस में पाठ की खोज कर सकते हैं:

import sys
from bs4 import BeautifulSoup
import urllib2
import re

response = urllib2.urlopen(sys.argv[1])
soup = BeautifulSoup(response.read(), from_encoding=response.info().getparam('charset'))
text_pattern = re.compile(re.escape(sys.argv[2]))

if soup.find('body').find(text=text_pattern):
    print 'Found the text in the page')

हालांकि, नेविगेशन, पाद लेख इत्यादि को बाहर करने के लिए इसे नीचे संकीर्ण करने के लिए, आपको कुछ ह्युरिस्टिक्स लागू करने की आवश्यकता होगी। प्रत्येक साइट अलग है और यह पता लगाने के लिए कि पृष्ठ का कौन सा हिस्सा मुख्य पाठ बनाता है, वह एक सीधा काम नहीं है।

उस पहिया को फिर से आविष्कार करने के बजाय, आप इसके बजाए पठनीयता API देखना चाहेंगे; वे आपके लिए साइट के 'मुख्य' हिस्से को पार्स करने के लिए पहले ही हेरिस्टिक की एक बड़ी लाइब्रेरी बना चुके हैं।

0
जोड़ा

सुंदर सूप, स्वयं "लेख" से पाठ निकालने में असमर्थ है, क्योंकि क्या और लेख है , HTML-wise, पूरी तरह से व्यक्तिपरक है, और एक साइट से अगले स्थान पर बदल जाएगा। आपको प्रत्येक साइट के लिए एक अलग पार्सर लिखना होगा।

मेरा सुझाव विरासत का उपयोग करके इसे मॉडल करना है:

class Webpage(object):
    def __init__(self, html_string):
        self.html= BeautifulSoup(html_string)
    def getArticleText(self):
        raise NotImplemented

class NewYorkTimesPage(Webpage):
    def getArticleText(self):
        return self.html.find(...)
0
जोड़ा

वेब पेज से आलेख निकालने का कोई आसान तरीका नहीं है। आप कुछ बाहरी सेवा का उपयोग कर सकते हैं जो पढ़ने योग्यता और python लाइब्रेरी इसके लिए

0
जोड़ा