मैं वेबसाइट को स्क्रैप करने के लिए सुंदर सूप का उपयोग कर रहा हूं। वेबसाइट का पेज मेरे ब्राउज़र में ठीक है:सुंदर सूप सीधे यूनिकोड की बजाय यूनिकोड + एचटीएमएल प्रतीक देता है। क्या यह एक बग या गलतफहमी है?
ऑक्सफैम इंटरनेशनल की रिपोर्ट "ऑफसाइड" http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271
विशेष रूप से, सिंगल और डबल उद्धरण ठीक लग। वे एएससीआई के बजाय एचटीएमएल प्रतीकों को देखते हैं, हालांकि जब मैं एफएफ 3 में स्रोत देखता हूं तो आश्चर्यजनक रूप से वे सामान्य एसीआईआई दिखाई देते हैं।
दुर्भाग्य से, जब मैं खुरच मैं इस
u'Oxfam इंटरनेशनल की तरह कुछ \ XE2 € ™ के रिपोर्ट हकदार \ XE2 € œOffside प्राप्त करें!
उफ़, मेरा मतलब है इस:
u'Oxfam International\xe2€™s report entitled \xe2€œOffside!
पेज के मेटा डेटा इंगित करता है 'आईएसओ 88,959-1' एन्कोडिंग। मैंने अलग-अलग एन्कोडिंग की कोशिश की है, यूनिकोड-> एएससीआई और एचटीएमएल-> एसीआईआई तीसरे पक्ष के कार्यों के साथ खेला, और एमएस/आईएसओ -885 9 -1 विसंगति को देखा, लेकिन इस तथ्य का तथ्य यह है कि ™ के पास कुछ भी नहीं है एकल उद्धरण, और मैं अपने सीमित ज्ञान में, यूनिकोड + htmlsymbol कॉम्बो को सही ascii या HTML प्रतीक में बदलना प्रतीत नहीं कर सकता, यही कारण है कि मैं मदद की तलाश में हूं।
मैं, एक ascii दोहरे उद्धरण के साथ खुशी होगी "या"
समस्या निम्नलिखित है कि मैं चिंतित अन्य अजीब प्रतीकों देखते हैं गलत तरीके से डीकोड कर रहा हूँ।
\xe2€™
नीचे जो कुछ मैंने देखा है, उसके बाद पुन: उत्पन्न करने के लिए कुछ अजगर नीचे है।
import twill
from twill import get_browser
from twill.commands import go
from BeautifulSoup import BeautifulSoup as BSoup
url = 'http://www.coopamerica.org/programs/responsibleshopper/company.cfm?id=271'
twill.commands.go(url)
soup = BSoup(twill.commands.get_browser().get_html())
ps = soup.body("p")
p = ps[52]
>>> p
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe2' in position 22: ordinal not in range(128)
>>> p.string
u'Oxfam International\xe2€™s report entitled \xe2€œOffside!<elided>\r\n'
http://www.fourmilab.ch/webtools/demoroniser/
http://www.crummy.com/software/BeautifulSoup/documentation.html
http://www.cs.tut.fi/~jkorpela/www/windows-chars.html
>>> AsciiDammit.asciiDammit(p.decode())
u'<p>Oxfam International\xe2€™s report entitled \xe2€œOffside!
>>> handle_html_entities(p.decode())
u'<p>Oxfam International\xe2\u20ac\u2122s report entitled \xe2\u20ac\u0153Offside!
>>> unicodedata.normalize('NFKC', p.decode()).encode('ascii','ignore')
'<p>Oxfam International€™s report entitled €œOffside!
>>> htmlStripEscapes(p.string)
u'Oxfam International\xe2TMs report entitled \xe2Offside!
संपादित करें:
,210मैं एक अलग बी एस पार्सर का उपयोग कर की कोशिश की है:
import html5lib
bsoup_parser = html5lib.HTMLParser(tree=html5lib.treebuilders.getTreeBuilder("beautifulsoup"))
soup = bsoup_parser.parse(twill.commands.get_browser().get_html())
ps = soup.body("p")
ps[55].decode()
जो मुझे देता है इस
u'<p>Oxfam International\xe2\u20ac\u2122s report entitled \xe2\u20ac\u0153Offside!
सबसे अच्छा मामले डिकोड मुझे देने के लिए एक ही परिणाम लगता है:
unicodedata.normalize('NFKC', p.decode()).encode('ascii','ignore')
'<p>Oxfam InternationalTMs report entitled Offside!
संपादित करें 2:
मैं एफएफ 3.0 के साथ मैक ओएस एक्स 4 चला रहा हूं।7 और Firebug
अजगर 2.5 (वाह, मैं विश्वास नहीं कर सकता शुरू से ही इस राज्य नहीं था)
क्या "उफ़ मैं इस का क्या मतलब है "मतलब है? क्या आपकी बैकस्पेस कुंजी काम नहीं करती? –
@ एसएलओटी: मैक में बैकस्पेस कुंजी है? – SilentGhost
@SilentGost: मेरे प्रत्येक मैक पर एक है। "ओह, मेरा मतलब यह है" बहुत, बहुत परेशान है। बैकस्पेस क्यों नहीं? एक अलग मार्कअप में एक ही अक्षर दोहराने के बारे में इतना महत्वपूर्ण क्या है? ये मज़ाकिया है"? –