Использование HTML Parser с HTTPResponse в Python 3.1 - PullRequest
0 голосов
/ 30 августа 2009

Данные ответа от объекта HTTPResponse имеют тип байтов.

conn = http.client.HTTPConnection(www.yahoo.com)
conn.request("GET","/")
response = conn.getresponse();
data = response.read()
type(data)

Данные имеют тип байтов.

Я хотел бы использовать ответ вместе со встроенным HTML-парсером Python 3.1. Однако я считаю, что HTMLParser.feed () требует строку (типа str). И этот метод не принимает данные в качестве аргумента. Чтобы обойти эту проблему, я использовал data.decode () для продолжения анализа.

Вопрос:

  1. Есть ли лучший способ достичь это?
  2. Есть ли причина, по которой HTTP ответ не возвращает строку?

Полагаю, причина в следующем: ответ сервера может быть в любом наборе символов. Таким образом, библиотека не может предположить, что это будет ASCII. Но тогда строка в Python - это Unicode. Библиотека HTTP также может возвращать строку. HTML-теги определенно в ASCII.

1 Ответ

2 голосов
/ 30 августа 2009

Есть ли причина, по которой HTTP-ответ не возвращает строку?

Ты сам это прибил. HTTP-ответ не обязательно является строкой.

Это может быть, например, изображение, и даже если оно является строкой, оно не может знать кодировку. Если вы знаете кодировку (или имеете библиотеку обнаружения кодировки), тогда очень легко преобразовать серию байтов в строку. На самом деле, тип байта часто используется синонимично с типом char в языках на основе C.

HTML-теги определенно в ASCII.

И если бы теги HTML всегда были ASCII, XHTML (который рекомендуется поставлять как UTF-8) имел бы серьезные проблемы!

Кроме того, HTTP! = HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...