UTF-8

2012-06-24 10 views
5

के साथ soup.get_text() का उपयोग करें मुझे सुंदर सूप का उपयोग करके किसी पृष्ठ से सभी टेक्स्ट प्राप्त करने की आवश्यकता है। सुंदर सूप के दस्तावेज पर, यह दिखाता है कि ऐसा करने के लिए आप soup.get_text() कर सकते हैं। जब मैं reddit.com पर ऐसा करने की कोशिश की, मैं यह त्रुटि आई:UTF-8


UnicodeEncodeError in soup.py:16 
    'cp932' codec can't encode character u'\xa0' in position 2262: illegal multibyte sequence 

मैं त्रुटियों कि साइटों मैं जाँच के सबसे पर की तरह मिलता है।
मुझे इसी तरह की त्रुटियां मिलीं जब मैंने soup.prettify() भी किया, लेकिन मैंने इसे soup.prettify('UTF-8') पर बदलकर तय किया। क्या इसको ठीक करने का कोई तरीका है? अग्रिम में धन्यवाद!

अपडेट 24 जून
मैं अन्य लोगों के लिए काम करने के लिए लगता है कि कोड का एक सा मिल गया है, लेकिन मैं अभी भी डिफ़ॉल्ट के बजाय UTF-8 उपयोग करने के लिए की जरूरत है। कोड:


texts = soup.findAll(text=True) 

    def visible(element): 
     if element.parent.name in ['style', 'script', '[document]', 'head', 'title']: 
     return False 
     elif re.match('', str(element)): return False 
     elif re.match('\n', str(element)): return False 
     return True 

    visible_texts = filter(visible, texts) 

    print visible_texts 

त्रुटि अलग है, हालांकि। प्रगति?


UnicodeEncodeError in soup.py:29 
'ascii' codec can't encode character u'\xbb' in position 1: ordinal not in range 
(128) 

उत्तर

0

यदि आप पृष्ठ पर यूनिकोड से निपट रहे हैं तो आप स्ट्र (टेक्स्ट) नहीं कर सकते हैं। Str() के बजाय, यूनिकोड() का उपयोग करें।

1

soup.get_text() एक यूनिकोड स्ट्रिंग देता है इसलिए आपको त्रुटि मिल रही है।

आप शैल स्तर पर एन्कोडिंग सेट करने सहित कई तरीकों से इसे हल कर सकते हैं।

export PYTHONIOENCODING=UTF-8 

आप sys को पुनः लोड कर सकते हैं और अपनी स्क्रिप्ट में इसे शामिल करके एन्कोडिंग सेट कर सकते हैं।

if __name__ == "__main__": 
    reload(sys) 
    sys.setdefaultencoding("utf-8") 

या आप utf-8 कोड में के रूप में स्ट्रिंग सांकेतिक शब्दों में बदलना कर सकते हैं। आपकी रेडडिट समस्या के लिए निम्न की तरह कुछ काम करेगा:

import urllib 
from bs4 import BeautifulSoup 

url = "https://www.reddit.com/r/python" 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 

# get text 
text = soup.get_text() 

print(text.encode('utf-8')) 
संबंधित मुद्दे