刮刮时产品说明不退货

时间:2018-07-29 06:30:32

标签: python python-3.x web-scraping

我试图从下面的网址中抓取产品说明。但这并没有返回

https://www.mambo.com.br/arroz-integral-camil-1kg/p

我下面的代码未返回说明文字:

myurl = "https://www.mambo.com.br/arroz-integral-camil-1kg/p"    
agent = {'User-Agent': 'Magic Browser'}
req1 = requests.get(myurl, headers=agent)
soup2 = BeautifulSoup(req1.content, "html.parser")
for desc in soup2.findAll('div', {"class": "accordion__body ProductDescription"}):
    print(desc.text)

请解决该问题并提供相关代码。

1 个答案:

答案 0 :(得分:0)

通过Ajax动态加载数据-页面本身不包含任何数据。

您需要从主页提取SKU(产品编号),然后调用位于https://www.mambo.com.br/api/的API以获取JSON数据(您可以在Firefox / Chrome网络检查器中查看该页面正在执行的所有请求):< / p>

from bs4 import BeautifulSoup
import requests
import json

product_url = "https://www.mambo.com.br/api/catalog_system/pub/products/search/?fq=productId:{}"
url = "https://www.mambo.com.br/arroz-integral-camil-1kg/p"

r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
sku = soup.select_one('meta[itemprop="sku"]')['content']
data_json = json.loads(requests.get(product_url.format(sku)).text)

for p in data_json:
    print(p['description'])
# print(json.dumps(data_json, indent=4)) # this will print all data about the product

输出:

O arroz integral faz parte da linha de produtos naturais da Camil. É saudável, prático e gostoso. Melhor que saborear um prato delicioso é fazer isso com saúde!

编辑:

或者,您可以从<meta itemprop="description">获取描述,但是我不确定该标记中的描述是否完整:

url = "https://www.mambo.com.br/arroz-integral-camil-1kg/p"

r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
print(soup.select_one('meta[itemprop="description"]')['content'])

打印:

O arroz integral faz parte da linha de produtos naturais da Camil. É saudável, prático e gostoso. Melhor que saborear um prato delicioso é fazer isso com saúde!