为了账号安全,请及时绑定邮箱和手机立即绑定

使用美丽的汤来寻找目标“物品”

使用美丽的汤来寻找目标“物品”

交互式爱情 2022-09-06 16:27:13
所以我正试图在丝芙兰网站上刮擦香水的名称,品牌和价格。但我注意到,60种香水中只有前12种会出现(一页上有60种香水)。我试图打印出“item_container”的长度,它显示有60个,但是从第12项开始,一些具有不同结构的代码开始出现在那里。我已经检查了他们的HTML结构,我不明白为什么我的代码不适用于其余的。我还尝试将“类”更改为更具体的类,例如:perfume_containers = soup.find_all('div', class_="css-12egk0t")自perfume_containers = soup.find_all('div', class_="css-ix8km1")但它要么给我同样的结果,要么没有任何东西可以回到我身边。未显示的项目的 HTML 代码工作的项目的 HTML 代码这是我的代码,我只显示我提取品牌的部分,因为它太长了,无法显示整个内容。请发送一些帮助!谢谢!!import pandas as pdfrom bs4 import BeautifulSoupimport requestssource = requests.get('https://www.sephora.com/shop/perfume')soup = BeautifulSoup(source.content, 'html.parser')perfume_containers = soup.find_all('div', class_="css-12egk0t")brands = []for container in perfume_containers:# The brand    brand = container.find('span', class_='css-ktoumz')    try:        brands.append(brand.text)    except:        continue
查看完整描述

1 回答

?
ibeautiful

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)


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 46 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信