Как удалить новую строку и перевод строки из тегов заголовка страницы? (Google App Engine - Python) - PullRequest
2 голосов
/ 25 марта 2011

У меня есть этот код для извлечения заголовка:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))
title = str(soup.html.head.title.string).lstrip("\r\n").rstrip("\r\n")

На некоторых сайтах добавляются возврат или перевод новой строки до и после тегов заголовка (почему?) И для их удаления я добавил

.lstrip("\r\n").rstrip("\r\n")

Это работает, например, с http://www.readwriteweb.com/, но не с http://poundwire.com/. Можете ли вы сказать, почему один работает, а другой нет?

Обновление

В продолжение комментария Стива Джессопа;Я использую replace и, похоже, работает:

title = str(soup.html.head.title.string).replace("\t", "").replace("\r", "").replace("\n", "")

Дайте мне знать, если есть лучший способ.Спасибо.

Обновление 2

Я нашел этот ответ и, кажется, лучше:

title = " ".join(str(soup.html.head.title.string).split())

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Попробуйте использовать str(title).strip(), который обрежет все пробелы в начале и конце строки.

1 голос
/ 25 марта 2011

На poundwire внутри тега <title> есть символ табуляции. Есть также некоторые пробелы (отступы, которые вы, вероятно, увидите, если вы «просматриваете источник»), которые вы, вероятно, тоже хотите удалить.

Как говорит самплебиас, используйте strip(), чтобы удалить пробелы на обоих концах строки. И получите текстовый редактор с режимом «видимых пробелов», включите этот режим и никогда больше не выключайте его, никогда: -)

Кстати, если вы используете Google App Engine, это означает, что вы используете Python 2.5, что, в свою очередь, означает, что str - это не строковый тип Unicode. BeautifulSoup делает все возможное, чтобы принудительно вводить данные в Unicode, поэтому стыдно выбрасывать исключение, когда вы попадаете на страницу, заголовок которой содержит не-ASCII символы.

[Редактировать: третий случай

$ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from BeautifulSoup import BeautifulSoup
>>> import urllib
>>> soup = BeautifulSoup(urllib.urlopen('http://code.google.com/p/google-refine/'))
>>> soup.html.head.title.string
u'\\n google-refine -\\n \\n \\n Google Refine, a power tool for working with messy data (formerly Freebase Gridworks) - Google Project Hosting\\n '
>>>

Итак, пробел в конце означает, что ваш rstrip не удаляет \n рядом с концом.

...