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
相关产品推荐
相关产品推荐

