从阿里巴巴(AliExpress)等网络零售商处挖掘信息对于收集产品信息、监控价格波动、收集评论等都大有裨益。在本文中,我们将探讨获取产品信息(如名称、价格、评级等)的过程,并对产品评论进行审查。我们还将演示如何通过传递产品 URL、自动检索产品 ID 并将数据保存到 CSV 文件中来使搜刮器动态化。
本教程将使用 Playwright 渲染动态内容并请求获取评论数据。我们还将确保刮板符合道德规范和最佳实践。
开始之前,请确保已安装以下 Python 库:
运行以下命令即可安装这些软件包:
# 安装 Playwright
pip install playwright
# 安装 Requests
pip install requests
# 安装用于解析 HTML 的 lxml
pip install lxml
# 安装用于数据处理和保存的 Pandas
pip install pandas
安装 Playwright 后,还需要安装所需的浏览器二进制文件:
playwright install
这将下载并设置必要的浏览器,以便 Playwright 正常运行。
AliExpress 的产品页面是动态的,这意味着它们通过 JavaScript 加载内容。为了处理这个问题,我们将使用 Playwright,这是一个允许您控制无头浏览器并与动态内容交互的 Python 库。
以下是您发送请求并导航到产品页面的方法:
from playwright.async_api import async_playwright
async def get_page_content(url):
async with async_playwright() as p:
# 如果需要,使用代理启动浏览器(如果不使用代理,则可移除)。
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
# 提取页面内容
content = await page.content()
await browser.close()
return content
# URL 示例
url = 'https://www.aliexpress.com/item/3256805354456256.html'
获得页面内容后,我们可以使用 lxml 和 XPath 查询提取产品数据。我们将收集产品标题、价格、评级、评论数和已售商品数等详细信息。
from lxml.html import fromstring
def extract_product_data(content):
parser = fromstring(content)
# 使用 XPath 提取产品详细信息
title = parser.xpath('//h1[@data-pl="product-title"]/text()')[0].strip()
price = parser.xpath('//div[@class="price--current--I3Zeidd product-price-current"]/span/text()')[0].strip()
rating = ' '.join(parser.xpath('//a[@class="reviewer--rating--xrWWFzx"]/strong/text()')).strip()
total_reviews = parser.xpath('//a[@class="reviewer--reviews--cx7Zs_V"]/text()')[0].strip()
sold_count = parser.xpath('//span[@class="reviewer--sold--ytPeoEy"]/text()')[0].strip()
product_data = {
'title': title,
'price': price,
'rating': rating,
'total_reviews': total_reviews,
'sold_count': sold_count
}
return product_data
该代码使用 XPath 从页面的 HTML 内容中提取相关产品的详细信息。
AliExpress 有一个单独的 API 端点用于获取产品评论。您可以从 URL 中动态提取产品 ID,并通过请求获取评论。在此功能中
import requests
def extract_product_id(url):
# 从 URL 中提取产品 ID
product_id = url.split('/')[-1].split('.')[0]
return product_id
def scrape_reviews(product_id, page_num=1, page_size=10):
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'en-IN,en;q=0.9',
'referer': f'https://www.aliexpress.com/item/{product_id}.html',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
params = {
'productId': product_id,
'lang': 'en_US',
'country': 'US',
'page': str(page_num),
'pageSize': str(page_size),
'filter': 'all',
'sort': 'complex_default',
}
response = requests.get('https://feedback.aliexpress.com/pc/searchEvaluation.do', params=params, headers=headers)
reviews = response.json()['data']['evaViewList']
# 仅提取审查文本
review_texts = [review['buyerFeedback'] for review in reviews]
return review_texts
在获取产品详细信息和评论后,我们使用 pandas 库将数据保存到 CSV 文件中。
import pandas as pd
def save_to_csv(product_data, reviews, product_id):
# 将产品详细信息保存为 CSV
df_product = pd.DataFrame([product_data])
df_product.to_csv(f'product_{product_id}_data.csv', index=False)
# 将评论保存为 CSV
df_reviews = pd.DataFrame({'reviews': reviews})
df_reviews.to_csv(f'product_{product_id}_reviews.csv', index=False)
print(f"Data saved for product {product_id}.")
产品详细信息和评论将保存到单独的 CSV 文件中,文件名中包含产品 ID,以便于识别。
以下是完整动态工作流程的工作原理:
# 从 URL 中提取产品 ID
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
from playwright.async_api import async_playwright
from lxml.html import fromstring
import requests
import pandas as pd
# 使用 Playwright 获取页面内容
async def get_page_content(url):
async with async_playwright() as p:
browser = await p.firefox.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto(url, timeout=60000)
content = await page.content()
await browser.close()
return content
# 提取产品数据
def extract_product_data(content):
parser = fromstring(content)
title = parser.xpath('//h1[@data-pl="product-title"]/text()')[0].strip()
price = parser.xpath('//div[@class="price--current--I3Zeidd product-price-current"]/span/text()')[0].strip()
rating = ' '.join(parser.xpath('//a[@class="reviewer--rating--xrWWFzx"]/strong/text()')).strip()
total_reviews = parser.xpath('//a[@class="reviewer--reviews--cx7Zs_V"]/text()')[0].strip()
sold_count = parser.xpath('//span[@class="reviewer--sold--ytPeoEy"]/text()')[0].strip()
return {
'title': title,
'price': price,
'rating': rating,
'total_reviews': total_reviews,
'sold_count': sold_count
}
# 从 URL 中提取产品 ID
def extract_product_id(url):
return url.split('/')[-1].split('.')[0]
# 搜索评论
def scrape_reviews(product_id, page_num=1, page_size=10):
headers = {
'accept': 'application/json, text/plain, */*',
'referer': f'https://www.aliexpress.com/item/{product_id}.html',
'user-agent': 'Mozilla/5.0'
}
params = {
'productId': product_id,
'lang': 'en_US',
'page': str(page_num),
'pageSize': str(page_size),
}
response = requests.get('https://feedback.aliexpress.com/pc/searchEvaluation.do', params=params, headers=headers)
reviews = response.json()['data']['evaViewList']
return [review['buyerFeedback'] for review in reviews]
# 将产品数据和评论保存为 CSV
def save_to_csv(product_data, reviews, product_id):
pd.DataFrame([product_data]).to_csv(f'product_{product_id}_data.csv', index=False)
pd.DataFrame({'reviews': reviews}).to_csv(f'product_{product_id}_reviews.csv', index=False)
print(f'Saved into: product_{product_id}_data.csv')
print(f'Saved into: product_{product_id}_reviews.csv')
# 主要功能
async def main(url):
content = await get_page_content(url)
product_data = extract_product_data(content)
product_id = extract_product_id(url)
reviews = scrape_reviews(product_id)
save_to_csv(product_data, reviews, product_id)
# 运行刮刀
import asyncio
url = 'https://www.aliexpress.com/item/3256805354456256.html'
asyncio.run(main(url))
刮擦数据时,遵守道德准则非常重要:
遵循这些指导原则将有助于您以道德和负责任的方式进行搜刮,从而将用户和 AliExpress 系统的风险降至最低。
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
评论: 0