如何查找未显示美化的元素

时间:2019-05-10 22:11:08

标签: python web-scraping beautifulsoup prettify

我正尝试通过Beautifulsoup获取此product的起源。我正在尝试选择订购产品数据的div,但不能。

稍后,我尝试在代码中获取其他div,这是代码中的第一个div,但是存在相同的问题。然后,我进行了美化,并且正在搜索的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的所有内容,以便稍后我可以将其中的段落(特别是“原始”段落)抓取到。谢谢!

1 个答案:

答案 0 :(得分:1)

页面向该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响应here

的示例

内容html在名为informations的列表中。显示的示例: