【问题标题】:Amazon Scrape Product Detail PageAmazon Scrape 产品详细信息页面
【发布时间】:2022-08-19 16:07:43
【问题描述】:
import requests
URL = \"https://www.amazon.com/TRESemm%C3%A9-Botanique-Shampoo-Nourish-Replenish/dp/B0199WNJE8/ref=sxin_14_pa_sp_search_thematic_sspa?content-id=amzn1.sym.a15c61b7-4b93-404d-bb70-88600dfb718d%3Aamzn1.sym.a15c61b7-4b93-404d-bb70-88600dfb718d&crid=2HG5WSUDCJBMZ&cv_ct_cx=hair%2Btresemme&keywords=hair%2Btresemme&pd_rd_i=B0199WNJE8&pd_rd_r=28d72361-7f35-4b1a-be43-98e7103da70c&pd_rd_w=6UL4P&pd_rd_wg=JtUqB&pf_rd_p=a15c61b7-4b93-404d-bb70-88600dfb718d&pf_rd_r=DFPZNAG391M5JS55R6HP&qid=1660432925&sprefix=hair%2Btresemme%2Caps%2C116&sr=1-3-a73d1c8c-2fd2-4f19-aa41-2df022bcb241-spons&smid=A3DEFW12560V8M&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExQlM3VFpGRVM5Tk8wJmVuY3J5cHRlZElkPUEwNjE5MjQwM01JV0FNN1pOMlRHSSZlbmNyeXB0ZWRBZElkPUEwNTA1MDQyMlQ5RjhRQUxIWEdaUiZ3aWRnZXROYW1lPXNwX3NlYXJjaF90aGVtYXRpYyZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU&th=1\"
webpage = requests.get(URL, headers=HEADERS)

from bs4 import BeautifulSoup
soup = BeautifulSoup(webpage.content, \"lxml\")

# Outer Tag Object
title = soup.find(\"span\", attrs={\"class\":\'a-list-item\'}).text.strip()
print(title)

这是我的代码:

如果您向下滚动页面,我正在尝试抓取产品详细信息页面信息畅销书排名和子类别畅销书排名。但我只得到美容个人护理类别。我需要排名。请帮忙。

  • 您可能需要 Selenium 来完成这项工作。

标签: python web-scraping beautifulsoup


【解决方案1】:

选择更具体的元素,例如使用css selectors,重点关注畅销书链接:

soup.select_one('#detailBulletsWrapper_feature_div a[href*="bestsellers"]').previous.strip().split()[0]

替代方法可能是选择包含的 span畅销书在带有id 的部分中detailBulletsWrapper_feature_div

soup.select_one('#detailBulletsWrapper_feature_div span:-soup-contains("Best Seller")').contents[2].strip().split()[0]

请注意,您应始终检查该元素是否可用。

例子

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
    'Accept-Language': 'en-US, en;q=0.5'}

URL = "https://www.amazon.com/TRESemm%C3%A9-Botanique-Shampoo-Nourish-Replenish/dp/B0199WNJE8/ref=sxin_14_pa_sp_search_thematic_sspa?content-id=amzn1.sym.a15c61b7-4b93-404d-bb70-88600dfb718d%3Aamzn1.sym.a15c61b7-4b93-404d-bb70-88600dfb718d&crid=2HG5WSUDCJBMZ&cv_ct_cx=hair%2Btresemme&keywords=hair%2Btresemme&pd_rd_i=B0199WNJE8&pd_rd_r=28d72361-7f35-4b1a-be43-98e7103da70c&pd_rd_w=6UL4P&pd_rd_wg=JtUqB&pf_rd_p=a15c61b7-4b93-404d-bb70-88600dfb718d&pf_rd_r=DFPZNAG391M5JS55R6HP&qid=1660432925&sprefix=hair%2Btresemme%2Caps%2C116&sr=1-3-a73d1c8c-2fd2-4f19-aa41-2df022bcb241-spons&smid=A3DEFW12560V8M&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExQlM3VFpGRVM5Tk8wJmVuY3J5cHRlZElkPUEwNjE5MjQwM01JV0FNN1pOMlRHSSZlbmNyeXB0ZWRBZElkPUEwNTA1MDQyMlQ5RjhRQUxIWEdaUiZ3aWRnZXROYW1lPXNwX3NlYXJjaF90aGVtYXRpYyZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU&th=1"
webpage = requests.get(URL, headers=headers)
soup = BeautifulSoup(webpage.content)
soup.select_one('#detailBulletsWrapper_feature_div span:-soup-contains("Best Seller")').contents[2].strip().split()[0]

输出

#224,708

【讨论】:

  • 天哪,它奏效了!非常感谢,在畅销书排名下的洗发水排名第 5774 位。没有文字。我怎样才能刮掉它?我会将您的答案标记为最佳答案。
  • 乐于助人 - 虽然您的原始问题可以得到改进,但您的额外问题将注定要针对 asking a new question 进行准确的关注,您可以做一些练习 - How to Ask
  • 非常感谢您,我将您的答案标记为选定答案。我使用以下方法弄清楚了:Subrank = soup.select_one('#detailBulletsWrapper_feature_div span:-soup-contains("Best Seller")').contents[5].get_text().split()[0]。但我还有一个问题:如何恰当地写成这种格式?你背后的逻辑是什么你为什么要抓住'#detailBulletsWrapper_feature_div span:你是否添加了#和span,因为我只在HTML中看到detailBulletsWrapper_feature_div。对不起,我是初学者。非常感谢。
  • 添加了指向我的答案的链接,该链接应涵盖您关于 css selectors 的问题
  • 太感谢了!看来你是专家。如果你有时间,你能看看我发布的循环问题。我是 Python 新手,我仍在努力学习。真的再次感谢!