2014-12-28 2 views
0

Я использую Python 3.x. При использовании urllib.request, чтобы загрузить веб-страницу, я получаю много \n между ними. Я пытаюсь удалить его, используя методы, указанные в других потоках форума, но я не могу этого сделать. Я использовал функцию strip() и функцию replace() ... но не повезло! Я запускаю этот код на eclipse. Вот мой код:Удалить новую строку в python с urllib

import urllib.request 

#Downloading entire Web Document 
def download_page(a): 
    opener = urllib.request.FancyURLopener({}) 
    try: 
     open_url = opener.open(a) 
     page = str(open_url.read()) 
     return page 
    except: 
     return"" 
raw_html = download_page("http://www.zseries.in") 
print("Raw HTML = " + raw_html) 

#Remove line breaks 
raw_html2 = raw_html.replace('\n', '') 
print("Raw HTML2 = " + raw_html2) 

Я не в состоянии определить, в чем причина получать много \n в переменной raw_html.

+0

Возможно, вы получаете '\ r \ n' вместо' \ n'? Вы все равно увидите новую строку, если просто удалите '\ n'. Попробуйте заменить оба. – orange

+0

Я также рисовал '.replace ('\ n', '') .replace ('\ r', '') .replace ('\ t', '')', но это не решило мою проблему! – hnvasa

+0

Я думаю, что они являются буквальными символами '\ n'. –

ответ

1

Похоже, что они буквальны \n символов, поэтому я предлагаю вам сделать вот так.

raw_html2 = raw_html.replace('\\n', '') 
+0

Рад, что это сработало .. –

+1

он лечит только симптомы и даже не все из них, например, держу пари, что в строке есть ложный 'b'', см. [пояснение] (http://stackoverflow.com/a/27674228/4279). – jfs

1

Если вы посмотрите на источник, который вы загрузили, то escape-последовательности, которые вы пытаетесь сделать replace(), фактически экранированы: \\n. Попробуйте вместо этого:

import urllib.request 

def download_page(a): 
    opener = urllib.request.FancyURLopener({}) 
    open_url = opener.open(a) 
    page = str(open_url.read()).replace('\\n', '') 
    return page 

Я удалил статью о try/except, потому что общие except заявления без таргетинга на исключение (или класс исключений), как правило, плохо. Если это не удается, вы не знаете, почему.

+0

спасибо за ваш ответ ..! Это сработало для меня! Я также заменил функцию, как вам было предложено! – hnvasa

+1

ошибочно называть 'str()' здесь, см. [объяснение] (http://stackoverflow.com/a/27674228/4279). – jfs

+0

@ JFSebastian Я знаю, я просто пытался сохранить код OP как можно ближе к оригиналу (да, Я удалил предложение try/except, но это действительно исказило меня).Лично я переписал все, чтобы использовать 'запросы', и сделать из него 1-лайнер, но вы имеете дело с тем, что вы получили :) – MattDMo

4

Вашей download_page() функция развращает HTML (str() вызова), именно поэтому вы видите \n (два символа \ и n) в выходном сигнале. Не используйте .replace() или другое подобное решение, исправить download_page() функции вместо:

from urllib.request import urlopen 

with urlopen("http://www.zseries.in") as response: 
    html_content = response.read() 

На данный момент html_content содержит bytes объекта. Для того, чтобы получить его как текст, вы должны знать его кодировку, например, чтобы получить его из заголовка HTTP Content-Type:

encoding = response.headers.get_content_charset('utf-8') 
html_text = html_content.decode(encoding) 

См A good way to get the charset/encoding of an HTTP response in Python.

если сервер не передает кодовую в Content-Type заголовка, то есть complex rules to figure out the character encoding in html5 document, например, это может быть указано в документе HTML: <meta charset="utf-8"> (вам потребуется HTML-парсер, чтобы получить его).

Если вы читаете html правильно, вы не должны видеть буквальные символы \n на странице.

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