it-swarm.com.de

BeautifulSoup: Objekt vom Typ 'Response' hat keine len ()

Problem: Wenn ich versuche, das Skript auszuführen, gibt BeautifulSoup(html, ...) die Fehlermeldung "TypeError: Objekt vom Typ 'Response' hat keine len (). Ich habe versucht, die eigentliche HTML-Datei als Parameter zu übergeben, funktioniert aber trotzdem nicht. 

import requests

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

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

Sie erhalten response.content. Es wird jedoch Antworttext als Bytes zurückgegeben ( docs ). Sie sollten jedoch str an den BeautifulSoup-Konstruktor übergeben ( docs ). Sie müssen also den response.text verwenden, anstatt Inhalt abzurufen. 

25
Matvei Nazaruk

Versuchen Sie, den HTML-Text direkt zu übergeben

soup = BeautifulSoup(html.text)
14
Jorge

Wenn Sie requests.get('https://example.com') verwenden, um den HTML-Code zu erhalten, sollten Sie requests.get('https://example.com').text verwenden.

0
Moshe G

sie erhalten nur Antwortcode in 'response' und verwenden Sie aus Sicherheitsgründen immer den Browserheader. Andernfalls Sie werden mit vielen Problemen konfrontiert

Suchen Sie den Header im UserAgent des Debugger-Konsolen-Netzwerkabschnitts 'header'

Versuchen

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

Es hat bei mir funktioniert:

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

Jetzt ist dieser Code unten besser (mit LXML-Parser):

import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(requests.get("your_url").text, 'lxml')
0
Ozcar Nguyen