我试图从下面的网址中抓取产品说明。但这并没有返回
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)
请解决该问题并提供相关代码。
答案 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!