Я пытаюсь увидеть, присутствует ли предложение в ответе от запроса.

import requests

r = requests.get('https://www.eventbrite.co.uk/o/piers-test-16613670281')
text = 'Sorry, there are no upcoming events'

if text in r.content: 
   print('No Upcoming Events')

Я получаю следующую ошибку:

TypeError: a bytes-like object is required, not 'str'

Я не совсем уверен, почему это происходит и какое решение будет.

11
Piers Thomas 27 Фев 2018 в 00:01

3 ответа

Лучший ответ

r.content является объектом bytes, но text является str, поэтому вы не можете выполнить проверку __contains__ (in) другого объекта напрямую.

Вы можете легко (повторно) определить объект text как строку байтов:

text = b'Sorry, there are no upcoming events'

Теперь вы можете сделать if text in r.content:.

Или вы можете использовать r.text, чтобы получить представление str напрямую, и использовать text как есть (как str).

6
heemayl 26 Фев 2018 в 21:12

Requests возвращает объект байтов, вам нужно преобразовать его в строку перед выполнением

Вот справка о встроенных типах, одним из которых являются байты https: //docs.python .org / 3 / библиотека / stdtypes.html

Строка кода, которую вы ищете, выглядит примерно так:

if text in r.content.decode():
  print('No upcoming events')

По умолчанию декодирование предполагает использование utf-8, но при необходимости вы можете передать другую кодировку.

3
Steve 26 Фев 2018 в 21:05

Попробуйте это вместо этого:

if text in r.text:

r.text является текстовым содержимым это возвращается. r.content является двоичный контент, который возвращается.

3
Robᵩ 26 Фев 2018 в 21:04