Как найти элемент, который prettify не показывает - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь получить источник этого продукта с Beautifulsoup. Я пытаюсь выбрать div, в котором упорядочены данные о продукте, но не могу.

Позже я попытался получить другой div в коде, один из первых в коде, но у меня возникла та же проблема. Затем я побежал prettify, и div, который я ищу, даже не появился. Как я могу получить эти данные?

Вот код, который я пробовал:

import urllib.request
from bs4 import BeautifulSoup

urlpage = 'https://www.esselungaacasa.it/ecommerce/nav/auth/supermercato/home.html?freevisit=true#!/negozio/prodotto/5397031?productCode=417932&productType=GROCERY&menuItemId=300000000002399'
page = urllib.request.urlopen(urlpage)
soup = BeautifulSoup(page, 'html.parser')
results = soup.findAll('div', attrs={'class': 'dettaglio'})

Хотел бы я получить все содержимое этого div, чтобы позже я мог вырезать абзацы внутри него (в частности, абзац 'Origine'). Спасибо!

1 Ответ

1 голос
/ 11 мая 2019

Страница запрашивает этот контент по этому URL:

https://www.esselungaacasa.it/ecommerce/resources/auth/displayable/breadcrumbs/300000000002399

Для этого требуется аутентификация заголовков, которая выглядит так, как показано ниже (проверено несколько раз). Значения действительны только в течение пары минут, поэтому вам нужно посмотреть, сможете ли вы получить их из предыдущего запроса и динамически обновить их.

JSON содержит HTML, который вы можете извлечь и проанализировать с помощью BeautifulSoup.

import requests    
headers = {
          'Cookie' : 'JSESSIONID=2GqxcW2JyxJ6JvSj7N6VsySBjG29fv4X4tqyVhkcQCJk012YZrJF!-137423361; rxVisitor=155754270561377S2OAJ7NF3RRVHAGOONVM6J8BTDM9E9; _ga=GA1.3.1899558727.1557542711; _gid=GA1.3.1887185695.1557542711; cc_advertising=yes; dtSa=-; BIGipServerPOOL-produzione20.esselungaacasa.it-HTTP=!t1YtlfoXiajamCWJ/a5rCzj/QGm88V4Qo0VUYPxsnhd0TBgWyp+Vfi6oydBlxU/hJ9i5S7kWGT9W/is=; BIGipServerPOOL-ecom30.webapp.esselungaacasa.it-AEM-HTTP=!EMW5HHM3WmpSfPyJ/a5rCzj/QGm88eK13IPf7jx3ZN2rGHroQLAAMcP+cqfG6pU/IQ0WkgGmjLJMCQ8=; dtCookie=1$343B9EA5CDF2E30CCE04D4415DA0CE8D|bdb705b7939fba60|1; XSRF-ECOM-TOKEN=16B8A78F9DC3F2AFFD0137EA22662C77A098944B2FD6F2F2C27693BD76BAF15C; dtLatC=127; BIGipServerPOOL-ecom30.webapp.esselungaacasa.it-8001=!S2wA3HtVHQfvqreJ/a5rCzj/QGm88ZamTbPAvAabBDwyKXTfVg7cipoMLFPFfqZEc5Cotrd56OEwVA==; _gat_UA-79392629-1=1; dtPC=1$544681956_471h17vCBGNMJLCLJIAOCFOMIEGLEBHHPIFOKNI; rxvt=1557546485823|1557542705627',
           'x-dtpc;' : '1$544433049_580h6vCBGNMJLCLJIAOCFOMIEGLEBHHPIFOKNI',
           'X-XSRF-TOKEN' : '16B8A78F9DC3F2AFFD0137EA22662C77A098944B2FD6F2F2C27693BD76BAF15C'

          }

r = requests.get('https://www.esselungaacasa.it/ecommerce/resources/auth/displayable/detail/5397031/300000000002399', headers = headers)

Вы можете увидеть пример ответа json здесь

Содержимое html находится внутри списка с именем informations. Показанный образец:

image

...