web-dev-qa-db-fra.com

BeautifulSoup: l'objet de type 'Response' n'a pas de len ()

Problème: lorsque j'essaie d'exécuter le script, BeautifulSoup(html, ...) affiche le message d'erreur "TypeError: l'objet de type" Response "n'a pas de len (). J'ai essayé de passer le code HTML réel en tant que paramètre, mais cela ne fonctionne toujours pas. 

import requests

url = 'http://vineoftheday.com/?order_by=rating'
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html, "html.parser")
17
Bryan

Vous obtenez response.content. Mais il renvoie le corps de la réponse sous forme d'octets ( docs ). Mais vous devriez passer str au constructeur BeautifulSoup ( docs ). Vous devez donc utiliser le response.text au lieu d’obtenir du contenu. 

25
Matvei Nazaruk

Essayez de passer le texte HTML directement

soup = BeautifulSoup(html.text)
14
Jorge

Si vous utilisez requests.get('https://example.com') pour obtenir le code HTML, vous devez utiliser requests.get('https://example.com').text.

0
Moshe G

vous n'obtenez que le code de réponse dans 'response' et utilisez toujours l'en-tête du navigateur pour la sécurité, sinon vous devrez faire face à de nombreux problèmes

Rechercher un en-tête dans la section réseau de la console du débogueur 'en-tête' UserAgent

Essayer

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())
0
Atul