Почему & ldquo; find & rdquo; производить тип строки?

Я знаю, что это старый поток, но ни одно из этих решений не решило проблему для меня. Что для меня работало, это обновить спящий режим до версии 5.2.10.Final (см. this SO post ).

Запуск Spring Boot и Spring Data JPA 1.5.4.RELEASE и спящий режим 5.2.10.Final.

0
задан martineau 18 January 2019 в 16:54
поделиться

3 ответа

Контент здесь является байтовым объектом. Вы пытаетесь найти строку в байтовом объекте. Преобразуйте содержимое в строку, изменив строку

Content = response.read()

на

Content = str(response.read())
0
ответ дан ZWang 18 January 2019 в 16:54
поделиться

Я не понимаю, почему аргумент 'str' в первую очередь.

Потому что это то, что вы передали: '<body>' является литеральным str объектом. И прежде чем вы спросите, Content - это объект bytes, который необходимо декодировать (используя кодировку, в которой должен быть объявлен в ответе), чтобы получить правильную строку.

Теперь гораздо более простое решение - которое рекомендует сам документ urllib - это использовать библиотеку python-запросов из 3-х частей, которая позаботится об этих досадных деталях.

Кроме того, если вы хотите анализировать HTML, во всех случаях используйте правильный анализатор HTML (BeautifulSoup - рекомендуемый выбор, если вам приходится иметь дело с возможно искаженным html, который является безусловно наиболее распространенным случаем).

0
ответ дан bruno desthuilliers 18 January 2019 в 16:54
поделиться

Content имеет тип bytes, поэтому аргументом для Content.find должно быть bytes или int, но '<body>' имеет тип str. Итак, у вас есть несовпадающие типы.

Как исправить: преобразовать str в bytes:

Content.find(b'<body>')
0
ответ дан ForceBru 18 January 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: