2016-11-27 5 views
0

Итак, каждый раз, когда я просматриваю эту веб-страницу на oed.com, я получаю небольшие апострофы, которые кажутся символами юникода. Как я могу фильтровать свой код и заменять все эти символы обычным апострофом? Ниже приведен код, который я использовал для печати моего списка слов (если вы не вошли в сайт, соскабливание несколько раз покажет повторяющиеся слова).Как отфильтровать символы юникода при веб-сканировании в python?

import csv 
import os 
import re 
import requests 
import urllib2 

year_start= 1550 
year_end = 1560 
subject_search = ['Law'] 

with open("/Applications/Python 3.5/Economic/OED_table.csv", 'a') as outputw, open("/Applications/Python 3.5/Economic/OED.html", 'a') as outputh: #opens the folder and 'a' adds the words to the csv file.  
for year in range(year_start, year_end +1): 
    path = '/Applications/Python 3.5/Economic' 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) 
    urllib2.install_opener(opener) 

    user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
    header = {'User-Agent':user_agent} 

    resultPath = os.path.join(path, 'OED_table.csv') 
    htmlPath = os.path.join(path, 'OED.html') 
    request = urllib2.Request('http://www.oed.com/search?browseType=sortAlpha&case-insensitive=true&dateFilter='+ str(year)+ '&nearDistance=1&ordered=false&page=1&pageSize=100&scope=ENTRY&sort=entry&subjectClass='+ str(subject_search)+ '&type=dictionarysearch', None, header) 
    page = opener.open(request) 

    urlpage = page.read() 
    outputh.write(urlpage) 

    new_words = re.findall(r'<span class=\"hwSect\"><span class=\"hw\">(.*?)</span>', urlpage) 
    print new_words 
    csv_writer = csv.writer(outputw) 
    if csv_writer.writerow([year] + new_words): 
     csv_writer.writerow([year, word]) 

После этого печатает мои слова, я часто получаю буквы Unicode \ xcb \ x88. Например, слово un'sentenced выводится как «un \ xcb \ x88sentenced».

Как взять все экземпляры этих букв unicode и заменить их соответствующим апострофом> '. Я думал, что это будет что-то вроде этого:

for word in new_words: 
    word = re.sub('[\x00-\x7f]','', word) 

Но я застрял.

+0

Вы хотите удалить эти символы или правильно их интерпретировать как unicode? Посмотрите на https://docs.python.org/2/howto/unicode.html. Если это возможно для вас, я бы рекомендовал переключиться на Python 3, что намного лучше при обработке unicode. – amyrit

+0

@amyrit, я хочу в основном удалить символы и заменить их простым символом апострофа клавиатуры> ' – Kainesplain

+0

Вы попробовали 'word.replace (' xcb \ x88 ',' '')'? Это только решает часть вашей проблемы, хотя я бы посоветовал вам правильно работать с Юникодом. Если это реальное кодирование, вы не можете этого избежать. – amyrit

ответ

0

об этом: после этого печатает мои слова, я часто получаю буквы Unicode \ xcb \ x88. Например, слово un'sentenced выводится как «un \ xcb \ x88sentenced».

проблема 1: \ xcb \ x88 НЕ является символом unicode (множественное число). Это ОДИН символ U + 02C8 MODIFIER CHARACTER VERTICAL LINE, закодированный в UTF-8. В стандарте Unicode указывается, что он изменяет следующий символ.

проблема 2: не сказано ни слова.

Вам необходимо выяснить, что означает этот гаджет в исходных данных. Я предполагаю, что это НЕ означает быть каким-то апострофом. Поэтому вам, вероятно, нужно удалить его.

Настоятельно рекомендуется: не удаляйте каждый символ не ASCII, с которым вы сталкиваетесь. Также читайте свой файл, декодируйте весь файл с UTF-8 в unicode, обрабатывайте unicode, наконец, кодируйте выходные данные ... не пытайтесь обрабатывать байты UTF-8.