paper2skills Playbook

LLM-Focused Web Crawling — LLM/MLLM 引导的主题爬取:KG 驱动发现与动态 JS 页面抽取

Skill-LLM-Focused-Web-Crawling · 22-数据采集工程

experimentknowledge_graphmulti_agentdata_collectionpricing广告与投放供应链与补货客服与VOC知识图谱与RAG数据采集与治理MAS与智能体工程定价与利润WF-A 智能补货WF-B 广告优化WF-C 客服分诊WF-D 选品扫描WF-E Review监控WF-F 动态定价WF-G Listing内容优化
实现难度⭐⭐⭐☆☆
业务视角
适用角色数据工程师 / 技术负责人 · 运营负责人 · 选品负责人
适用平台Amazon SP API + Keepa · TikTok Shop API · 跨境多平台数据湖
什么情况下用想监控竞品价格/评论/排名但没有稳定采集能力,手动太慢;多平台数据分散整合成本极高;数据管道不稳定经常断
成功是什么样的竞品价格/评论数据每日自动更新,多平台数据统一入仓,数据管道稳定性 >99%,取数时间从小时降到分钟
业务痛点
竞品数据要手动收集太慢平台 API 限制抓不到数据多系统数据整合不起来报表用的数据是过期的

1. 解决的问题

1. 广度优先爬取浪费资源:爬 100 个页面才找到 5 个有价值的竞品信息

2. 核心算法逻辑

传统爬虫的两大痛点:

3. 业务应用场景

业务背景:进入新品类(婴儿监视器)前,需要了解主要供应商生态——谁在给谁代工、谁有 FDA 认证、产能规模如何。手工调研需 2-3 周。

业务背景:Top-10 竞品 Listing 的价格、评分、变体规格、A+ 内容每日变化,需要日常监控。Amazon Listing 是 JS 动态渲染,静态 requests 无法抓取。

Webscraper MLLM 抓取流程:

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

未自动抽取;请查看原始 Skill 卡片。

7. 代码模板

代码块数量:5 · 路径:未检测到

from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional, Set, Tuple
from collections import defaultdict
import re
import time
import random


@dataclass
class Entity:
    name: str
    entity_type: str
    attributes: Dict[str, Any] = field(default_factory=dict)
    source_url: str = ""


@dataclass
class KGRelation:
    subject: str
    predicate: str
    obj: str


@dataclass
class KnowledgeGraph:
    entities: Dict[str, Entity] = field(default_factory=dict)
    relations: List[KGRelation] = field(default_factory=list)

    def add_entity(self, entity: Entity):
        self.entities[entity.name] = entity

    def add_relation(self, rel: KGRelation):
        self.relations.append(rel)

    def get_gaps(self, required_attrs: List[str]) -> List[Tuple[str, List[str]]]:
        gaps = []
        for name, entity in self.entities.items():
            missing = [a for a in required_attrs if a not in entity.attributes]
            if missing:
                gaps.append((name, missing))
        return gaps

    def get_neighbors(self, entity_name: str) -> List[str]:
        neighbors = []
        for r in self.relations:
            if r.subject == entity_name:
                neighbors.append(r.obj)
            elif r.obj == entity_name:
                neighbors.append(r.subject)
        return neighbors


class WebToKGExtractor:
    """
    W→K Stage 1: 从爬取的页面文本中提取实体和关系(LLM 提取的轻量模拟)
    """

    SUPPLIER_PATTERNS = [
        r'(?:supplier|manufacturer|factory|代工|供应商|制造商)[:\s]+([A-Za-z\u4e00-\u9fff]+(?:\s+[A-Za-z]+)*)',
        r'([A-Za-z\u4e00-\u9fff]+(?:\s+[A-Za-z]+)*)\s+(?:manufactures|supplies|produces|生产|供应)',

8. 论文来源

  • 2602.24262
  • 2603.29161