Нужно превратить весь текст в обычный текст / ASCII (я думаю?) - PullRequest
1 голос
/ 08 августа 2011

Я пытаюсь вычеркнуть историю с веб-сайта, на котором я работаю, когда вы вводите URL-адрес, который затем публикует сообщения у различных новостных партнеров, которые у нас есть. Проблема в том, что специальные символы, кажется, дают сбой. Я пытаюсь сделать .relace на строку, но это, кажется, не работает особенно хорошо.

Есть ли какой-либо способ заставить вывод быть полностью обычным текстом, который должен быть доступен везде? Мол, без специальных символов?

Мой текущий код:

from __future__ import division
#from __future__ import unicode_literals
from __future__ import print_function
import spynner
from mechanize import Browser
import SendKeys
from BeautifulSoup import BeautifulSoup

br = Browser()
url = "http://www.benzinga.com/trading-ideas/long-ideas/11/07/1815251/bargain-hunting-for-mid-caps-five-stocks-worth-taking-a-look-"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)

artcontent = soup.find('div', {'class': 'article-content'})

title = artcontent.find('h1', {'id': 'title'})

title = title.string

try:
    title = title.replace("'", "'")
except:
    pass

authorname = artcontent.find('div', {'class': 'node full'})
authorname = authorname.find('div', {'class': 'article-submitted'})
authorname = authorname.find('div', {'class': 'info'})
authorname = authorname.find('a')
authorname = authorname.string

story = artcontent.find('div', {'class': 'node full'})
story = story.find('div', {'class': 'content clear-block'})
story = story.findAll('p', {'class': None})

#story = [str(x).replace("<p>","\n\n").replace("</p>","") for x in story]

story = [str(x) for x in story]

storyunified = ''.join(story)

#try:
#    storyunified = storyunified.strip("\n")
#except:
#    pass
#try:
#    storyunified = storyunified.strip("\n")
#except:
#    pass

#print(storyunified)

try:
storyunified = storyunified.replace("Â", "")
except:
    pass

try:
    storyunified = storyunified.replace("â€", "\'")
except:
    pass

try:
    storyunified = storyunified.replace('“', '\"')
except:
    pass

try:
    storyunified = storyunified.replace('"', '\"')
except:
     pass

try:
    storyunified = storyunified.replace('”', '\"')
except:
    pass

try:
    storyunified = storyunified.replace("âタ", "")
except:
    pass

try:
    storyunified = storyunified.replace("â€", "")
except:
    pass

Как видите, я пытаюсь избавиться от них вручную, и это не всегда работает.

Затем я пытаюсь опубликовать сообщение, используя Spynner, но я не считаю этот код критическим. Я публикую в блогах Forbes.

Ответы [ 2 ]

2 голосов
/ 08 августа 2011

Пожалуйста, ознакомьтесь с этой статьей и посмотрите, знакомы ли вы с принципами, которые она обсуждает: http://www.joelonsoftware.com/articles/Unicode.html

Мой инстинкт заключается в том, что ваши партнеры по новостям могут принимать тексты помимо того, что может кодировать ASCII,Вам просто нужно убедиться, что ваше приложение правильно обрабатывает строки символов и строки байтов, и все должно работать естественно.

В Python 2.x 'this text' - это строка байтов, а u'this text' - это строкасимвольный.В Python 3.x 'this text' - это строка символов, а b'this text' - строка байтов.Строки байтов имеют метод .decode(encoding), а строки символов имеют метод .encode(encoding).

Удачи!

1 голос
/ 08 августа 2011

Я боролся с кодировкой символов в Python на днях.

Попробуйте это:

import unicodedata

storyunified = unicodedata.normalize('NFKD', storyunified).encode('ascii','ignore').decode("ascii")

Единственное, чего не стоит, это то, что он удаляет оскорбительные символы вместо их замены.Чтобы изменить это поведение, вы можете изменить ignore на replace, но я не проводил никакого тестирования по этому поводу.

...