1 回答
TA贡献1993条经验 获得超5个赞
这里的问题是,正如您从 html 属性 中注意到的那样,某些类数据组是在页面加载后加载的,而您成功爬网的 12 个项目具有 属性 。BeautifulSoup解析html的确切方式,您如何看待网页的源代码,您可以从源代码中看到只有12个项目被加载,因此其余的项目可能以其他方式加载(可能使用ajax或其他东西),但是在这种情况下,我发现这些项目实际上是在源代码底部的脚本标签上以json的形式在源代码上交付的, 因此,您实际上不再需要抓取数据,您可以直接访问json,如下所示:data-lload="comp"data-lload="false"
import pandas as pd
from bs4 import BeautifulSoup
import requests
import json
source = requests.get('https://www.sephora.com/shop/perfume')
soup = BeautifulSoup(source.content, 'html.parser')
scriptContent = soup.find(id="linkJSON").text
catalog = json.loads(scriptContent)
products = catalog[3]['props']['products']
extracted = []
for p in products:
extracted.append({'brand': p['brandName'], 'displayName': p['displayName'], 'price': p['currentSku']['listPrice']})
print(extracted)
添加回答
举报