BeautifulSoup: el objeto de tipo ‘Respuesta’ no tiene len ()

Problema: cuando bash ejecutar el script, BeautifulSoup(html, ...) muestra el mensaje de error “TypeError: el objeto de tipo ‘Response’ no tiene len (). Intenté pasar el html real como parámetro, pero aún así no funciona

 import requests url = 'http://vineoftheday.com/?order_by=rating' response = requests.get(url) html = response.content soup = BeautifulSoup(html, "html.parser") 

Usted está recibiendo response.content . Pero devuelve el cuerpo de respuesta como bytes ( docs ). Pero debe pasar str al constructor BeautifulSoup ( docs ). Así que necesitas usar el response.text lugar de obtener contenido.

Intenta pasar el texto HTML directamente

 soup = BeautifulSoup(html.text) 

Si está utilizando requests.get('https://example.com') para obtener el HTML, debe usar requests.get('https://example.com').text .

solo está obteniendo el código de respuesta en ‘respuesta’ y siempre usa el encabezado del navegador por seguridad, de lo contrario, tendrá muchos problemas

Encontrar encabezado en la consola del depurador sección de red ‘encabezado’ UserAgent

Tratar

 import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent url = 'http://www.google.com' headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'} response = requests.get(quote_page, headers=headers).text soup = BeautifulSoup(response, 'html.parser') print(soup.prettify()) 

Funcionó para mí:

 soup = BeautifulSoup(requests.get("your_url").text) 

Ahora, este código de abajo es mejor (con el analizador lxml):

 import requests from bs4 import BeautifulSoup soup = BeautifulSoup(requests.get("your_url").text, 'lxml')