2013-07-25 5 views
7

मैं सुंदर सूप के साथ एचटीएमएल दस्तावेज़ों से कुछ पाठ पकड़ने की कोशिश कर रहा हूं। मेरे लिए एक बहुत ही अव्यवस्थित मामले में, यह एक अजीब और रोचक परिणाम उत्पन्न करता है: एक निश्चित बिंदु के बाद, सूप पाठ के भीतर अतिरिक्त रिक्त स्थान से भरा होता है (एक स्थान प्रत्येक पत्र को निम्नलिखित से अलग करता है)। मैंने इसके लिए कोई कारण खोजने के लिए वेब पर खोजने की कोशिश की, लेकिन मुझे विपरीत बग के बारे में केवल कुछ खबरें मिलीं (बिल्कुल कोई जगह नहीं)।सुंदर सूप अप्रत्याशित अतिरिक्त रिक्त स्थान

क्या आपके पास कुछ सुझाव या इशारा है कि यह क्यों होता है, और इस समस्या को हल करने के लिए कैसे संकेत मिलता है?

यह बहुत ही बुनियादी कोड है कि मैं बनाया है:

from bs4 import BeautifulSoup 

import urllib2 
html = urllib2.urlopen("http://www.beppegrillo.it") 
prova = html.read() 
soup = BeautifulSoup(prova) 
print soup 

और यह एक पंक्ति परिणामों से लिया, लाइन जहां इस समस्या को प्रकट करने के लिए शुरू होता है:

मूल्य = \ " ग्यूसेप labbate ogm? गैर vorremmo Nuovi uccelli chiamati lontre \ "> < इनपुट onmouseover = \" टिप ('< केंद्रों terclass = \ \' शीर्षक _ वीडियो \ \ '> < ख > जी iuseppelabbateo जी मीटर? ओ न हीं वी ओ आर आर ई मीटर मीटर ओ एन यू वी मैं यू सी सी ई एल एल मैं खो ज मैं एक मीटर एक टी मैं एल ओ एन टी आर ई <

+2

आप 'अल्ट्रासोप' क्यों प्रिंट कर रहे हैं? यह 'सूप' नहीं होना चाहिए? – svineet

+0

एक अन्य वेबसाइट के साथ यहां एक ही समस्या है। मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि यह सुंदर सूप या अंतर्निहित एलएक्सएमएल के साथ एक समस्या है या नहीं। सॉफ्टवेयर 32 बिट-पायथन पर समस्याओं के बिना चलता है और 64 बिट के साथ विफल रहता है। – Matthias

+0

मैं 'अल्ट्रासूप' के लिए क्षमा चाहता हूं, बस एक छोटी सी त्रुटि। बेशक, सही कोड 'प्रिंट सूप' –

उत्तर

10

मेरा मानना ​​है कि इस lxml के HTML पार्सर के साथ एक बग है। प्रयास करें:

from bs4 import BeautifulSoup 

import urllib2 
html = urllib2.urlopen ("http://www.beppegrillo.it") 
prova = html.read() 
soup = BeautifulSoup(prova.replace('ISO-8859-1', 'utf-8')) 
print soup 

कौन सा समस्या के लिए एक समाधान नहीं है। मेरा मानना ​​है कि यह समस्या lxml 3.0 अल्फा 2 और lxml 2.3.6 में तय की गई थी, इसलिए यह जांचने योग्य हो सकता है कि आपको किसी नए संस्करण में अपग्रेड करना है या नहीं।

आप बग के बारे में अधिक जानकारी चाहते हैं, तो इसे शुरू में यहां दायर किया गया था:

https://bugs.launchpad.net/beautifulsoup/+bug/972466

आशा इस मदद करता है,

हेडन

+0

यह पूरी तरह से काम कर रहा है, धन्यवाद।क्या मैं आपसे पूछ सकता हूं कि इस मामले में प्रतिस्थापन क्या बदल रहा है? एक और सवाल: सुंदरसप हमेशा एलएक्सएमएल एचटीएमएल पार्सर को अपनाता है? यदि नहीं, तो मैं इसका उपयोग क्यों कर रहा हूं, और मैं किस पार्सर को अपनाया हूं, मैं कैसे नियंत्रित कर सकता हूं? मुझे लगता है कि ये डमी प्रश्नों के रूप में दिखाई दे सकते हैं, लेकिन मैं एचटीएमएल पार्सिंग में एक शुरुआतकर्ता हूं –

+0

@ हैडन: बदसूरत, लेकिन एक कामकाजी समाधान। उसके लिए धन्यवाद। – Matthias

4

आप html.parser रूप पार्सर निर्दिष्ट कर सकते हैं:

soup = BeautifulSoup(prova, 'html.parser') 

इसके अलावा आप html5 पार्सर निर्दिष्ट कर सकते हैं:

soup = BeautifulSoup(prova, 'html5') 

अभी तक html5 पार्सर स्थापित नहीं है? टर्मिनल से यह स्थापित करें:

sudo apt-get install python-html5lib 

xml पार्सर इस्तेमाल किया जा सकता (soup = BeautifulSoup(prova, 'xml')) लेकिन आप multi-valued attributesclass="foo bar" की तरह में कुछ मतभेद देख सकते हैं।