it-swarm.com.ru

BeautifulSoup: объект типа 'Response' не имеет len ()

Проблема: когда я пытаюсь выполнить скрипт, BeautifulSoup(html, ...) выдает сообщение об ошибке «TypeError: объект типа 'Response' не имеет len (). Я попытался передать фактический html в качестве параметра, но он все еще не работает. 

import requests

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

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

Вы получаете response.content. Но он возвращает тело ответа в байтах ( docs ). Но вы должны передать str конструктору BeautifulSoup ( docs ). Поэтому вам нужно использовать response.text вместо получения контента. 

25
Matvei Nazaruk

Попробуйте передать текст HTML напрямую

soup = BeautifulSoup(html.text)
14
Jorge

Если вы используете requests.get('https://example.com') для получения HTML, вам следует использовать requests.get('https://example.com').text.

0
Moshe G

вы получаете только код ответа в 'response' и всегда используете заголовок браузера для безопасности, иначе вы столкнетесь со многими проблемами

Найти заголовок в сетевом разделе отладчика 'header' UserAgent

Пытаться

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