2008-09-01 23 views
15

में एंटरप्राइज़ को हल करें क्योंकि नियमित अभिव्यक्ति मुझे डराते हैं, मैं सभी HTML टैग को हटाने और पाइथन में स्ट्रिंग से HTML इकाइयों को हल करने का एक तरीका ढूंढने का प्रयास कर रहा हूं।एचटीएमएल टैग को फ़िल्टर करें और पाइथन

+0

वास्तव में कड़ी: // diveintopython।संगठन/html_processing/index.html) –

उत्तर

39

lxml का उपयोग करें जो कि पायथन के लिए सबसे अच्छा xml/html लाइब्रेरी है।

import lxml.html 
t = lxml.html.fromstring("...") 
t.text_content() 

और अगर आप सिर्फ lxml.html.clean module

6

में वर्णित जब मैं लुकास के साथ सहमत हैं कि नियमित अभिव्यक्ति सब डरावना नहीं कर रहे हैं, मैं अभी भी लगता है कि आप एक विशेष HTML पार्सर के साथ जाना चाहिए की तरह कुछ की कोशिश होगी। ऐसा इसलिए है क्योंकि एचटीएमएल मानक पर्याप्त बालों वाली है (विशेष रूप से यदि आप इंटरनेट से ली गई मनमाने ढंग से "एचटीएमएल" पृष्ठों को पार्स करना चाहते हैं) तो आपको कोने के मामलों को संभालने के लिए बहुत सारे कोड लिखने होंगे। ऐसा लगता है कि python includes one out of the box

आपको python bindings for TidyLib भी देखना चाहिए जो टूटी हुई HTML को साफ़ कर सकता है, जिससे किसी भी HTML पार्सिंग की सफलता दर अधिक हो जाती है।

1

आपको नियमित अभिव्यक्ति की तुलना में कुछ और जटिल की आवश्यकता हो सकती है।

<div>5 < 7</div> 

regex के साथ टैग स्ट्रिपिंग स्ट्रिंग वापस आ जाएगी "5" और इलाज

< 7</div> 

मात्र एक टैग के रूप में: वेब पृष्ठों अक्सर कोण कोष्ठक कि एक टैग का हिस्सा नहीं हैं, इस तरह की है और इसे बाहर पट्टी।

मैं सुझाव देता हूं कि पहले से लिखे गए कोड की तलाश है जो आपके लिए यह करता है। मैंने एक खोज की और पाया: http://zesty.ca/python/scrape.html यह एचटीएमएल इकाइयों को भी हल कर सकता है।

15

BeautifulSoup का उपयोग करें! यह इसके लिए बिल्कुल सही है, जहां आपके पास संदिग्ध गुण के आने वाले मार्कअप हैं और इससे कुछ उचित प्राप्त करने की आवश्यकता है। बस मूल पाठ में पास करें, सभी स्ट्रिंग टैग निकालें, और उनसे जुड़ें।

+9

और ऐसा करने के लिए कोड होगा: '' .join (BeautifulSoup (मान, convertEntities = BeautifulSoup.HTML_ENTITIES) .findAll (text = True)) –

0

रेगुलर एक्सप्रेशन पर एचटीएमएल नज़र को साफ़ करने में चाहते हैं डरावना नहीं हैं, लेकिन अपने स्वयं के regexes लेखन एचटीएमएल पट्टी पागलपन के लिए एक निश्चित पथ (है और यह काम नहीं करेगा, या तो)। ज्ञान के मार्ग का पालन करें, और कई अच्छे HTML-पार्सिंग पुस्तकालयों में से एक का उपयोग करें।

लुकास का उदाहरण भी टूटा हुआ है क्योंकि "उप" पाइथन स्ट्रिंग का तरीका नहीं है। आपको "पुनः आयात" करना होगा, फिर re.sub (पैटर्न, प्रतिलिपि, स्ट्रिंग) पर कॉल करें। लेकिन यह न तो यहां और न ही है, क्योंकि आपके प्रश्न के सही उत्तर में किसी भी regexes लिखना शामिल नहीं है।

0

लोगों को अन्य उत्तरों में दिखाए जाने वाले अर्थ की मात्रा को देखते हुए, मैं कहूंगा कि रेगेक्स का उपयोग संभवतः आपकी स्थिति के लिए सबसे अच्छा विचार नहीं है। कोशिश की और परीक्षण की गई चीज़ों के लिए जाएं, और मेरे पिछले जवाब को एक प्रदर्शन के रूप में देखें कि regexes को डरावना नहीं होना चाहिए।

संबंधित मुद्दे