Ответ 1
Вы получаете response.content
. Но он возвращает тело ответа как байты (docs). Но вы должны передать str
в конструктор BeautifulSoup (docs). Поэтому вам нужно использовать response.text
вместо того, чтобы получать контент.
Проблема: когда я пытаюсь выполнить скрипт, 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")
Вы получаете response.content
. Но он возвращает тело ответа как байты (docs). Но вы должны передать str
в конструктор BeautifulSoup (docs). Поэтому вам нужно использовать response.text
вместо того, чтобы получать контент.
Попробуйте передать текст HTML напрямую
soup = BeautifulSoup(html.text)
Если вы используете requests.get('https://example.com')
для получения HTML-кода, вы должны использовать requests.get('https://example.com').text
.
в ответе вы получаете только код ответа и всегда используете заголовок браузера для безопасности, иначе вы столкнетесь со многими проблемами
Найти заголовок в разделе сети заголовка консоли отладчика 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())
Это сработало для меня:
soup = BeautifulSoup(requests.get("your_url").text)
Теперь этот код ниже (с парсером lxml):
import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(requests.get("your_url").text, 'lxml')