2010-07-07 8 views
9

मैंने अपनी उबंटू 10.04 मशीन पर सिरियस चलाने के लिए अभी पाइथन, मप्लेयर, सुंदरसप और सिपी स्थापित किया है। मैंने कुछ दस्तावेज़ों का पालन किया जो सरल दिखते हैं, लेकिन कुछ मुद्दों का सामना कर रहे हैं। मैं पाइथन से परिचित नहीं हूं, इसलिए यह मेरे लीग से बाहर हो सकता है।विकृत प्रारंभ टैग त्रुटि - पायथन, सुंदर सूप, और सिपी - उबंटू 10.04

मैं स्थापित सब कुछ प्राप्त करने में सक्षम था, लेकिन फिर चल sipie इस देता है:

/usr/bin/Sipie/Sipie/Config.py:12: DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5
Traceback (most recent call last): File "/usr/bin/Sipie/sipie.py", line 22, in <module> Sipie.cliPlayer()
File "/usr/bin/Sipie/Sipie/cliPlayer.py", line 74, in cliPlayer completer = Completer(sipie.getStreams())
File "/usr/bin/Sipie/Sipie/Factory.py", line 374, in getStreams streams = self.tryGetStreams()
File "/usr/bin/Sipie/Sipie/Factory.py", line 298, in tryGetStreams soup = BeautifulSoup(data)
File "/usr/local/lib/python2.6/dist-packages/BeautifulSoup-3.1.0.1-py2.6.egg/BeautifulSoup.py", line 1499, in __init__ BeautifulStoneSoup.__init__(self, *args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/BeautifulSoup-3.1.0.1-py2.6.egg/BeautifulSoup.py", line 1230, in __init__ self._feed(isHTML=isHTML)
File "/usr/local/lib/python2.6/dist-packages/BeautifulSoup-3.1.0.1-py2.6.egg/BeautifulSoup.py", line 1263, in _feed self.builder.feed(markup)
File "/usr/lib/python2.6/HTMLParser.py", line 108, in feed self.goahead(0)
File "/usr/lib/python2.6/HTMLParser.py", line 148, in goahead k = self.parse_starttag(i)
File "/usr/lib/python2.6/HTMLParser.py", line 226, in parse_starttag endpos = self.check_for_whole_start_tag(i)
File "/usr/lib/python2.6/HTMLParser.py", line 301, in check_for_whole_start_tag self.error("malformed start tag")
File "/usr/lib/python2.6/HTMLParser.py", line 115, in error raise HTMLParseError(message, self.getpos())
HTMLParser.HTMLParseError: malformed start tag, at line 100, column 3

मैं इन फ़ाइलों और लाइन नंबर के माध्यम से देखा, लेकिन बाद से मैं अजगर के साथ अपरिचित हूँ, यह बहुत मतलब नहीं है। आगे क्या करना है इसके बारे में कोई सलाह? कारण BeautifulSoup uses HTMLParser rather than SGMLParser की

उत्तर

8

आप जिन मुद्दों का सामना कर रहे हैं वे काफी आम हैं, और वे विशेष रूप से गैर-निर्मित HTML के साथ सौदा करते हैं। मेरे मामले में, एक HTML तत्व था जिसने एक विशेषता के मूल्य को दोहराया था। मैं आज वास्तव में इस मुद्दे में भाग गया, और ऐसा करने में आपकी पोस्ट में आया।

sudo easy_install bs4 
sudo apt-get install python-html5lib 

फिर, इस उदाहरण कोड चलाएँ:: मैं अंत में यह BeautifulSoup 4.

सबसे पहले सौंपने से पहले html5lib के माध्यम से HTML पार्स करने के माध्यम से इस समस्या को हल करने में सक्षम था, आप की आवश्यकता होगी

from bs4 import BeautifulSoup 
import html5lib 
from html5lib import sanitizer 
from html5lib import treebuilders 
import urllib 

url = 'http://the-url-to-scrape' 
fp = urllib.urlopen(url) 

# Create an html5lib parser. Not sure if the sanitizer is required. 
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"), tokenizer=sanitizer.HTMLSanitizer) 
# Load the source file's HTML into html5lib 
html5lib_object = parser.parse(file_pointer) 
# In theory we shouldn't need to convert this to a string before passing to BS. Didn't work passing directly to BS for me however. 
html_string = str(html5lib_object) 

# Load the string into BeautifulSoup for parsing. 
soup = BeautifulSoup(html_string) 

for content in soup.findAll('div'): 
    print content 

यदि आपके पास इस कोड के बारे में कोई प्रश्न हैं या आपको थोड़ा अधिक विशिष्ट मार्गदर्शन की आवश्यकता है, तो बस मुझे बताएं।:)

+2

मुझे 'वैल्यूएरर: अपरिचित पेड़बिल्डर" सुंदरसप "' (पायथन 2.7.5, सुंदरसूप 4.3.2, एचटीएमएल 5 एलबी 0.9 99) –

-2

"डाटा" कि फ़ाइल "/usr/bin/Sipie/Sipie/Factory.py" में बताया गया है में लाइन 100 के कॉलम 3 में देखो, लाइन 298

+0

मुझे लगता है कि आपका क्या मतलब है, लेकिन मुझे इन आंकड़ों को खोजने में कठिनाई हो रही है ... फिर भी खोज रहे हैं। अभी भी अपरिचित कैसे ये सभी कार्यक्रम एक साथ काम करते हैं ... कोई अतिरिक्त संकेत? – nicorellius

2

नए संस्करणों (SGMLParser को पायथन 3.0 मानक लाइब्रेरी से हटाया जा रहा है)। नतीजतन, सुंदर सूप अब कई विकृत HTML दस्तावेज़ों को सही तरीके से संसाधित नहीं कर सकता है, जो मुझे विश्वास है कि आप यहां सामना कर रहे हैं।

आपकी समस्या का एक समाधान (जो अभी भी उबंटू 10.04LTS पर पायथन 2.6 के साथ काम करेंगे) uninstall BeautifulSoup, and install an older version को होने की संभावना है:

sudo apt-get remove python-beautifulsoup 
sudo easy_install -U "BeautifulSoup==3.0.7a" 

बस ध्यान रखें कि यह अस्थायी समाधान नहीं रह गया अजगर 3.0 के साथ काम करेंगे हो (जो उबंटू के भविष्य के संस्करणों में डिफ़ॉल्ट हो सकता है)।

15

मान लीजिए आप BeautifulSoup4 उपयोग कर रहे हैं, मैं आधिकारिक दस्तावेज में कुछ इस बारे में पता चला: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

If you’re using a version of Python 2 earlier than 2.7.3, or a version of Python 3 earlier than 3.2.2, it’s essential that you install lxml or html5lib–Python’s built-in HTML parser is just not very good in older versions.

मैं इस कोशिश की और यह सिर्फ तरह, अच्छी तरह से काम करता है क्या @Joshua

soup = BeautifulSoup(r.text, 'html5lib') 
+1

+1 मिल रहा है, अच्छा लगता है !! –

+0

क्या उपरोक्त कोड में यह "आर" अनुरोध पुस्तकालय से एक HTML वस्तु है? कोई फर्क नहीं पड़ता, यह महान ऑनलाइनर भी pycurl लाइब्रेरी का उपयोग कर एक आकर्षण की तरह काम करता है। +1 – FredTheWebGuy

+1

@Dreadful_Code: r = request.get (url) – dannyroa

2

कमांड लाइन:

$ pip install beautifulsoup4 
$ pip install html5lib 

अजगर 3:

from bs4 import BeautifulSoup 
from urllib.request import urlopen 

url = 'http://www.example.com' 
page = urlopen(url) 
soup = BeautifulSoup(page.read(), 'html5lib') 
links = soup.findAll('a') 

for link in links: 
    print(link.string, link['href']) 
+0

@ रयान एलन मुझे विकृत प्रारंभ टैग संदेश भी मिल रहा है, लेकिन मुझे डिस्क पर सहेजी गई एक HTML फ़ाइल के साथ पार्स करने की आवश्यकता है, न कि खुले यूआरएल। क्या इसे करने का कोई तरीका है? – ShaunO

+0

आप urlopen का उपयोग करने के बजाय फ़ाइल खोलेंगे। 'पृष्ठ = खुला ('आपका/फ़ाइल/पथ /')' –