You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用开放API多关键词爬虫报KeyError,如何实现循环批量抓取?

现有代码核心问题

  • 循环逻辑错误:你遍历df3['search keyword']得到的已经是关键词字符串,再用df3.loc[i, 'Search Keyword']查询属于错误用法:1. loc第一个参数要求传入行索引,你传入关键词作为行索引会触发KeyError;2. 列名大小写不匹配,你的df列名是小写search keyword,代码里写的首字母大写Search Keyword也是KeyError的直接诱因。
  • 结果存储逻辑错误:所有存储爬取结果的列表都定义在for循环内部,每次循环都会清空上一次的结果,且最终生成DataFrame的代码在循环外部,仅能保留最后一个关键词的爬取结果。
  • 固定值错误:Part Number和Product URL写死为固定值,没有对应每个关键词的部件号,也没有拼接真实的商品ID生成可访问链接。

修正后可运行代码

import requests
import pandas as pd
import numpy as np

# 创建关键词测试表
data3 = {'part number': [123456, 234567, 345678, 456789], 'search keyword': ['apple', 'banana', 'orange', 'mango']}
df3 = pd.DataFrame.from_dict(data3)
print(df3)

# 初始化全局结果列表,存储所有关键词的爬取数据
all_data = []
Shopee_url = 'https://shopee.com.my'

# 遍历每一行关键词数据,同时取部件号和搜索词
for idx, row in df3.iterrows():
    part_num = row['part number']
    keyword_search = row['search keyword']
    print(f"正在爬取关键词:{keyword_search}")
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Referer': '{}search?keyword={}'.format(Shopee_url, keyword_search)
    }
    url = 'https://shopee.com.my/api/v2/search_items/?by=relevancy&keyword={}&limit=100&newest=0&order=desc&page_type=search'.format(keyword_search)

    try:
        # 请求API
        r = requests.get(url, headers=headers, timeout=10)
        r.raise_for_status()
        res = r.json()
    except Exception as e:
        print(f"关键词{keyword_search}爬取失败,错误信息:{e}")
        continue

    # 解析当前关键词的返回结果
    for item in res.get('items', []):
        item_data = {
            'Part Number': part_num,
            'Product Name': item['name'],
            'Min Price After Discount': item['price_min'],
            'Extracted Standard Retail Price': item['price_min_before_discount'],
            'Seller Location': item['shop_location'],
            'Seller ID': item['shopid'],
            'Product ID': item['itemid'],
            'Product URL': f"https://shopee.com.my/product/{item['shopid']}/{item['itemid']}/"
        }
        all_data.append(item_data)

# 统一转为DataFrame
df2 = pd.DataFrame(all_data)
# 可取消下方注释直接导出为csv文件查看结果
# df2.to_csv("shopee爬取结果.csv", index=False, encoding='utf_8_sig')
print(f"爬取完成,共获取{len(df2)}条数据")

运行效果

自动遍历所有关键词,每个关键词爬取100条结果,最终总数据量=关键词数量*100;异常请求会自动跳过不影响整体运行,每条数据都对应正确的部件号和可访问的商品链接。

内容的提问来源于stack exchange,提问作者bluemango26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:24:03