点击产品链接(例如 https://www.amazon.com/Robux-Roblox-Online-Game-Code/dp/B07RZ74VLR/),您将进入一个详细信息的宝库。要查看这些信息的结构,您可以使用 Chrome 等现代浏览器。
检查 HTML 元素
右键点击产品标题,选择“检查”。您会发现产品标题的 HTML 标记已被高亮显示。具体来说,它包含在 span 标签内,其 id 属性定义为“productTitle”。
同样的方法也可用于查找其他关键元素的标记:
- 价格:右键点击价格,选择“检查”。价格中的整数部分位于类名为“a-price-whole”的 span 标签内,而分位数则存储在另一个类名为“a-price-fraction”的 span 标签中。
- 评分、图片和描述:利用相同的检查功能定位这些关键组件,它们各自被包裹在特定的标签和类中。
从亚马逊抓取产品数据的过程可以分解为具体步骤,每个步骤针对产品信息的特定方面。通过使用 requests 和 BeautifulSoup 等 Python 库,我们可以访问、定位并抓取所需的详细信息。 以下是操作的详细指南:
1. 发起请求
首先向商品页面的 URL 发送一个带有自定义头部的 GET 请求:
response = requests.get(url, headers=custom_headers)
soup = BeautifulSoup(response.text, 'lxml')
我们使用 BeautifulSoup 解析 HTML 内容,这有助于通过 CSS 选择器查询特定信息。 2. 定位并抓取产品名称
通过 span 元素内的唯一 id productTitle 识别产品标题:
title_element = soup.select_one('#productTitle')
title = title_element.text.strip()
3. 定位并抓取产品评分
要抓取产品评分,需访问 #acrPopover 选择器的 title 属性:
rating_element = soup.select_one('#acrPopover')
rating_text = rating_element.attrs.get('title')
rating = rating_text.replace('out of 5 stars', '')
4. 定位并抓取产品价格
使用 #price_inside_buybox 选择器提取产品价格:
price_element = soup.select_one('#price_inside_buybox')
print(price_element.text)
5. 定位并抓取产品图片
使用 #landingImage 选择器获取默认图片 URL:
image_element = soup.select_one('#landingImage')
image = image_element.attrs.get('src')
6. 定位并抓取商品描述
使用 #productDescription 选择器获取商品描述:
description_element = soup.select_one('#productDescription')
print(description_element.text)
7. 定位并抓取商品评论
评论的抓取更为复杂,因为一个产品可能有多个评论。单条评论可能包含作者、评分、标题、内容、日期和验证状态等多种信息。
收集评论
使用 div.review 选择器识别并收集所有评论:
review_elements = soup.select("div.review")
scraped_reviews = []
for review in review_elements:
# Extracting specific review details...
提取评论详情
每条评论均可拆解为具体细节:
- 作者:span.a-profile-name
- 评分:i.review-rating
- 标题:a.review-title > span:not([class])
- 内容:span.review-text
- 日期:span.review-date
- 已验证状态:span.a-size-mini
可以通过各自的 CSS 选择器选择这些元素,然后使用与前几个步骤类似的方法进行提取。
整合评论数据
创建一个包含已提取评论详情的对象,并将其追加到评论数组中:
r = {
"author": r_author,
"rating": r_rating,
"title": r_title,
"content": r_content,
"date": r_date,
"verified": r_verified
}
scraped_reviews.append(r)
抓取亚马逊产品数据是一项多方面的任务,需要采用精确的方法来定位网页结构中的特定元素。通过利用现代网页抓取工具的功能,可以成功提取详细的产品信息。
处理商品列表
要抓取详细的产品信息,通常需从产品列表或分类页面开始,这些页面通常以网格或列表形式展示产品。
识别商品链接
在分类页面上,您可能会注意到每个商品都被包含在一个带有特定属性 [data-asin] 的 div 标签中。指向单个商品的链接通常位于该 div 内的 h2 标签中。
这些链接对应的 CSS 选择器为:
[data-asin] h2 a
解析并访问链接
您可以使用 BeautifulSoup 选取这些链接并提取其 href 属性。请注意,这些链接可能是相对路径,因此建议使用 urljoin 方法将其转换为绝对 URL。
from urllib.parse import urljoin
def parse_listing(listing_url):
# Your code to fetch and parse the page goes here...
link_elements = soup_search.select("[data-asin] h2 a")
page_data = []
for link in link_elements:
full_url = urljoin(listing_url, link.attrs.get("href"))
product_info = get_product_info(full_url)
page_data.append(product_info)
处理分页
许多商品列表页面都采用了分页设计。您可以通过查找包含“Next”字样的链接来跳转到下一页。
next_page_el = soup.select_one('a:contains("Next")')
if next_page_el:
next_page_url = next_page_el.attrs.get('href')
next_page_url = urljoin(listing_url, next_page_url)
随后可使用该 URL 解析下一页,并持续循环直至不再有“Next”链接。
8. 将抓取的产品数据导出为 JSON 文件
抓取的产品数据被收集为列表中的字典。这种格式便于转换为 Pandas DataFrame,从而简化数据处理和导出。
以下是将抓取的数据转换为 DataFrame 并保存为 JSON 文件的方法:
import pandas as pd
df = pd.DataFrame(page_data)
df.to_json('baby.json', orient='records')
这将生成一个包含所有抓取商品信息的 JSON 文件。
本指南详细介绍了抓取商品列表的分步操作,包括分页导航和将结果导出为 JSON 文件。请务必根据您要抓取的网站的具体结构和要求调整这些方法。