0

Это мой код:Как удалить символы nonAscii в питоне

#!C:/Python27/python 
# -*- coding: utf-8 -*- 
import requests 
from bs4 import BeautifulSoup 
import urllib2 
import sys 
import urlparse 
import io 

url = "http://www.dlib.org/dlib/november14/beel/11beel.html" 
#url = "http://eqa.unibo.it/article/view/4554" 
#r = requests.get(url) 
html = urllib2.urlopen(url) 
soup = BeautifulSoup(html, "html.parser") 
#soup = BeautifulSoup(r.text,'lxml') 

if url.find("http://www.dlib.org") != -1: 
    div = soup.find('td', valign='top') 
else: 
    div = soup.find('div',id='content') 

f = open('path/file_name.html', 'w') 
f.write(str(div)) 
f.close() 

Зачистка этих веб-страницах я нашел некоторые nonAScii символов в HTML файл, написанном от этого сценария, что мне нужно, чтобы удалить или решить в машиночитаемый символы. Любые советы? Спасибо

+0

сценарий, который вы написали, не вызывает ошибок, в чем проблема с не ascii-буквами? Теперь вы хотите его в файле, который вы пишете? – jcr

+0

Я знаю, что ошибок нет, но в HTML есть некоторые символы, подобные «Â», которые мне нужно удалить. – Poggio

+0

@ Может быть, это поможет вам http://stackoverflow.com/questions/17732695/how-to-return-plain-text-from-beautiful-soup-instead-of-unicode – LetzerWille

ответ

2

символы 8 байт (0-255), ASCII символы являются 7 байт (0-127), так что вы можете просто удалить все символы со значением Ord ниже 128

CHR преобразовать целое число символ, ord преобразует символ в целое число.

text = ''.join((c for c in str(div) if ord(c) < 128) 

это должен быть ваш окончательный код

#!C:/Python27/python 
# -*- coding: utf-8 -*- 
import requests 
from bs4 import BeautifulSoup 
import urllib2 
import sys 
import urlparse 
import io 

url = "http://www.dlib.org/dlib/november14/beel/11beel.html" 
#url = "http://eqa.unibo.it/article/view/4554" 
#r = requests.get(url) 
html = urllib2.urlopen(url) 
soup = BeautifulSoup(html, "html.parser") 
#soup = BeautifulSoup(r.text,'lxml') 

if url.find("http://www.dlib.org") != -1: 
    div = soup.find('td', valign='top') 
else: 
    div = soup.find('div',id='content') 

f = open('path/file_name.html', 'w') 
text = ''.join((c for c in str(div) if ord(c) < 128) 
f.write(text) 
f.close() 
+0

В какой позиции мне нужно скопировать код !? – Poggio

+0

Traceback (последний звонок последний): Файл «pppp.py», строка 38, в div = '. .Join ((c для c в div, если ord (c) <128)) Файл "pppp. py ", строка 38, в div = '' .join ((c для c в div, если ord (c) <128)) ТипError: ord() ожидаемая строка длины 1, но найден тег Это ошибка – Poggio

+0

должна быть строка (div), чтобы преобразовать тег div в текстовую строку, я забыл, что – jcr

-1

Чтобы удалить не ASCII персонажей из текста.

import string 

text = [word for word in text if word not in string.ascii_letters] 
+0

Это вызывает ошибки, вызывая i не может записывать char не в ASCII в Python. – Poggio

+0

@ Poggio Вы не можете запустить это понимание списка? какие ошибки вы получаете? – LetzerWille

2

Попробовать нормализуют строку, а затем ASCII кодировать его, игнорируя ошибки.

# -*- coding: utf-8 -*- 
from unicodedata import normalize 

string = 'úäô§' 

if isinstance(string, str): 
    string = string.decode('utf-8') 

print normalize('NFKD', string).encode('ASCII', 'ignore') 
>>> uao 
+0

Я думаю, что ваше решение является лучшим, потому что мое решение делает более странные вещи для 16-битных закодированных букв, где ваши ведут себя немного более разумно – jcr

Смежные вопросы