Beautiful Soup не парсит всю страницу
Хочу спарсить при помощи Beautiful Soup наименования iphone с этой страницы "https://www.mvideo.ru/smartfony-i-svyaz-10/smartfony-205/f/category=iphone-914/seriya-iphone=iphone-11-pro-max/diagonal-ekrana=62-i-bolee/vstroennaya-pamyat=256gb"
Например в Эльдорадо у меня получилось, но при таком же коде парсинг Мвидео происходит не всей страницы. В результате не видно даже названий iphone пример:(Смартфон Apple iPhone 11 Pro Max 256GB Midnight Green MWHM2RU/A), хотя я прописал в примере, чтобы парсил всю страницу. В чем может быть проблема, подскажите, пожалуйста?
UPD:понял, что тут идет загрузка динамического контента. Буду копать в эту сторону. Если у кого есть информация/ помощь / примеры, то это будет к месту!
#посмотреть название айфона
import requests
from bs4 import BeautifulSoup as bs
URL_TEMPLATE = 'https://www.mvideo.ru/smartfony-i-svyaz-10/smartfony-205/f/category=iphone-914/seriya-iphone=iphone-11-pro-max/diagonal-ekrana=62-i-bolee/vstroennaya-pamyat=256gb/'
r = requests.get(URL_TEMPLATE)
soup = bs(r.text, "html.parser")
iph_names = soup.find_all()
for name in iph_names:
print (name)
Ответы (1 шт):
На данном сайте данные действительно подгружаются через Ajax. Соответственно необходимо загрузить страницу, выполнить скрипты и получить контент. Я бы использовал для этого смесь Selenium и BS, если это необходимо. Код бы выглядел примерно таким образом:
from bs4 import BeautifulSoup as BS
from selenium import webdriver
url = "https://www.mvideo.ru/smartfony-i-svyaz-10/smartfony-205/f/category=iphone-914/seriya-iphone=iphone-11-pro-max/diagonal-ekrana=62-i-bolee/vstroennaya-pamyat=256gb"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(config.safe_delay)
html = driver.page_source
soup = BS(html, "html.parser")
iph_names = soup.find_all()
for name in iph_names:
print (name)
Такой код будет более требователен к ресурсам системы, но по скорости работы системы сильно отличаться не будет, т.к. пока BS парсерит 1-страницу сайта, Selenium может загружать следующую.