【发布时间】:2022-07-21 17:46:50
【问题描述】:
我想获取名称、烘焙度和价格,我已经使用下面的代码成功地完成了它。但是我无法刮掉价格。它显示为“无”。
URLS = ["https://www.thirdwavecoffeeroasters.com/products/vienna-roast","https://www.thirdwavecoffeeroasters.com/products/baarbara-estate","https://www.thirdwavecoffeeroasters.com/products/el-diablo-blend","https://www.thirdwavecoffeeroasters.com/products/organic-signature-filter-coffee-blend","https://www.thirdwavecoffeeroasters.com/products/moka-pot-express-blend-1","https://www.thirdwavecoffeeroasters.com/products/karadykan-estate","https://www.thirdwavecoffeeroasters.com/products/french-roast","https://www.thirdwavecoffeeroasters.com/products/signature-cold-brew-blend","https://www.thirdwavecoffeeroasters.com/products/bettadakhan-estate","https://www.thirdwavecoffeeroasters.com/products/monsoon-malabar-aa"]
for url in range(0,10):
req=requests.get(URLS[url])
soup = bs(req.text,"html.parser")
coffees = soup.find_all("div",class_="col-md-4 col-sm-12 col-xs-12")
for coffee in coffees:
name = coffee.find("div",class_="product-details-main").find("ul",class_="uk-breadcrumb uk-text-uppercase").span.text
roast = coffee.find("div",class_="uk-flex uk-flex-middle uk-width-1-1 coff_type_main").find("p",class_="coff_type uk-margin-small-left uk-text-uppercase").text.split("|")[0]
prices = coffee.find("div",class_="uk-width-1-1 uk-first-column")
print(name,roast,price)
【问题讨论】:
-
类似于你昨天的问题,如果你打印汤,它会告诉你价格选择器不存在
-
如果您将
req.text保存到文件中并尝试使用 ctrl+c 查找价格,您会看到它不包含在 HTML 页面中。页面很可能是由 JavaScript 动态加载的。如果您仔细查看req.text,在第 107 行有一个名为meta的全局变量。该 JavaScript 对象以方便的 JSON 格式包含所有产品价格。您可能决定寻找它,并使用json.loads()使用json库对其进行解析。祝你好运! -
您可能想重新审视过去几天的问题,查看回复,接受对您有帮助的回复,并将这些回复应用到您的工作中。你可能会取得更大的成功。
-
另外需要指出的是,您共享的代码 sn-p 引用了一个未定义的
price变量。此外,最后一个打印语句的缩进是关闭的。当您在 Stack Overflow(或任何其他网站)上发布您的问题时,请尽量小心
标签: python web-scraping beautifulsoup