在实际应用中,如果需要处理大量商品信息,单次请求往往无法获取所有数据。Shopee API通常会限制单次返回的商品数量,因此需要通过分页机制逐步获取所有商品。通过合理使用limit和offset参数,爬虫可以高效地处理大量商品数据。
以下是如何修改上述Python爬虫程序,使其能够处理大量商品的完整示例:
一、修改后的代码示例
1. 获取店铺所有商品的分页数据
我们需要通过循环逐步获取所有商品数据,并将结果汇总。
Python
import requests
import pandas as pd
def fetch_shopee_products(shop_id, limit=50):
"""
获取店铺所有商品信息,支持分页处理。
:param shop_id: 店铺ID
:param limit: 每页返回的商品数量
:return: 商品列表
"""
offset = 0
all_products = []
while True:
url = f"https://shopee.tw/api/v2/shop/get_items?shopid={shop_id}&limit={limit}&offset={offset}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
items = data.get("items", [])
if not items: # 如果返回为空,说明已经获取完所有数据
break
all_products.extend(items)
offset += limit
else:
print(f"请求失败,状态码:{response.status_code}")
break
return all_products
def save_products_to_csv(products, file_path):
"""
将商品信息保存为CSV文件。
:param products: 商品列表
:param file_path: 输出文件路径
"""
product_details = []
for item in products:
product_details.append({
"商品名称": item.get("name"),
"价格": item.get("price") / 100000, # Shopee价格单位为分
"库存": item.get("stock"),
"销量": item.get("sold"),
"商品链接": f"https://shopee.tw/{item.get('name')}-i.{item.get('shopid')}.{item.get('itemid')}"
})
df = pd.DataFrame(product_details)
df.to_csv(file_path, index=False, encoding="utf-8-sig")
print(f"商品信息已保存到 {file_path}")
if __name__ == "__main__":
# 示例:店铺ID
shop_id = "987654321" # 替换为实际店铺ID
output_file = "shopee_products.csv"
# 获取店铺所有商品
products = fetch_shopee_products(shop_id)
print(f"共获取到 {len(products)} 件商品信息。")
# 保存到CSV文件
save_products_to_csv(products, output_file)
二、代码说明
-
分页逻辑:
-
使用
limit和offset参数逐步获取数据。 -
每次请求返回
limit数量的商品。 -
如果返回的商品为空,说明已经获取完所有数据,退出循环。
-
-
数据汇总:
-
将每次请求返回的商品数据汇总到
all_products列表中。
-
-
数据保存:
-
将汇总的商品数据保存为CSV文件,方便后续分析。
-
三、处理大量商品的注意事项
-
请求频率限制:
-
Shopee API可能对请求频率有限制。为了避免被封禁,建议在请求之间添加适当的延时(如
time.sleep(1))。
-
-
数据量过大:
-
如果数据量非常大,可以考虑将数据分批次保存到文件中,而不是全部汇总后再保存。
-
-
错误处理:
-
在实际应用中,建议添加更完善的错误处理逻辑,例如重试机制、日志记录等。
-
-
代理和多线程:
-
如果需要进一步提高效率,可以使用代理IP和多线程技术。但请注意,这可能会增加被封禁的风险,需谨慎使用。
-
四、总结
通过上述代码,爬虫可以高效地处理大量商品数据。通过分页机制和循环请求,我们可以逐步获取所有商品信息,并将其保存为CSV文件。希望这篇文章能帮助你在实际项目中更好地处理大量数据。
如果你在实践中遇到任何问题,欢迎随时交流和讨论。让我们一起用技术的力量,解锁更多可能!
版权声明:本文仅供学习交流使用,未经授权,请勿用于商业用途。

7271

被折叠的 条评论
为什么被折叠?



