Python如何抓取登录后JS渲染的非表格div库存数据并按尺寸整理
实现方案
1 加载JS动态渲染页面提取库存数值
普通requests请求只能获取页面初始静态HTML,无法拿到JS执行后生成的动态内容,可选两种实现方案:
方案1:使用无头浏览器渲染页面(兼容性最高)
推荐用Playwright,无需手动配置浏览器驱动,对登录态的兼容也更好。你可以直接复用已有的登录Cookie传入浏览器实例,也可以直接在Playwright中执行登录流程,示例代码如下:
from playwright.sync_api import sync_playwright import pandas as pd # 启动浏览器 with sync_playwright() as p: # 启动无头模式(不需要显示浏览器窗口) browser = p.chromium.launch(headless=True) context = browser.new_context() # 如果已有登录cookie,可以在这里添加,避免重复登录 # context.add_cookies(your_login_cookies) page = context.new_page() # 访问库存页面 page.goto("你的库存页面URL") # 等待页面加载完成,等待product-count元素出现 page.wait_for_selector(".product-count", timeout=10000) # 提取所有product-count元素,同时关联对应的尺寸、库存地点 stock_items = [] # 这里需要根据你实际的页面结构调整选择器,匹配每一个库存条目父节点 item_blocks = page.locator(".stock-item-block").all() for block in item_blocks: location = block.locator(".location-name").inner_text().strip() size = block.locator(".size-label").inner_text().strip() count = int(block.locator(".product-count").inner_text().strip()) stock_items.append({ "库存地点": location, "尺寸": size, "库存数量": count }) browser.close()
方案2:抓后端接口直接取数据(效率最高)
打开浏览器F12开发者工具的「网络」面板,筛选「XHR/获取」选项,刷新页面后查找返回库存数据的接口,直接请求该接口即可拿到结构化的JSON数据,无需解析HTML,效率比无头浏览器高很多。
2 数据排序与表格存储
拿到结构化的库存数据列表后,按以下步骤处理即可得到符合要求的表格:
- 自定义尺寸排序规则:如果是S/M/L/XL这类非数字尺寸,可以提前写一个映射字典指定排序优先级
- 排序后用pandas生成表格,可直接导出为CSV、Excel等格式
示例处理代码:
# 自定义尺寸排序映射,按你实际的尺寸类型调整 size_order = {"S":1, "M":2, "L":3, "XL":4, "XXL":5} # 给每个条目增加排序权重字段 for item in stock_items: item["sort_weight"] = size_order.get(item["尺寸"], 999) # 按尺寸排序,也可以再加库存地点作为第二排序条件 stock_items_sorted = sorted(stock_items, key=lambda x: (x["sort_weight"], x["库存地点"])) # 转成DataFrame,去掉排序用的辅助字段 df = pd.DataFrame(stock_items_sorted).drop(columns=["sort_weight"]) # 可以按需求转成透视表,行是库存地点、列是尺寸,值是库存数量 pivot_df = df.pivot(index="库存地点", columns="尺寸", values="库存数量").fillna(0) # 导出为Excel pivot_df.to_excel("库存统计.xlsx") # 也可以直接导出为CSV df.to_csv("库存统计.csv", index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者user1506822
相关产品推荐
相关产品推荐

