电商爬取数据之-并发懒加载--可解决90%的风控
评论
收藏

电商爬取数据之-并发懒加载--可解决90%的风控

经验分享
羽易
2026-01-06 16:15·浏览量:919
羽易
影刀专家
发布于 2025-12-22 09:15更新于 2026-01-06 16:15919浏览

羽易出品,必属精品。实际上我是跨境电商从业者,专注于跨境电商解决方案。

首先,感谢影刀工程师-驿站,他提供的影刀模块创新使用了DOM+JS的方式实现页面下滑。快速且可以持续爬取

为什么已经有了驿站大佬的懒加载还要再造一个出来呢,主要的原因是,最近有一个客户的需求是爬取 Target数据,在解决完风控后,发现这个网站,不论有没有魔法上网,都是很慢,以至于爬取数据的时间很耽误。既然如此,只能大力出奇迹,我并发10个浏览器,完美解决。

话不多说,直接上代码,首先需要安装:Drissionpage,为什么呢、,因为影刀不支持并发,所以只能曲线救国。

安装地址如下:懒加载函数:

def 获取懒加载元素( 页面, 元素路径,元素超时时间=10,每次最大获取数=-1,):
    """
    :param 页面: 
    :param 元素路径: xpath(x://)
    :param 元素超时时间: 最大运行时间(秒)
    :param 每次最大获取数: 单次最多 元素数据量
    """

    已出现元素 = set()

    无新元素计数 = 0

    while True:

        try:
            当前元素 = 页面.eles(元素路径,timeout=20.0)
        except Exception:
            当前元素 = []

        新元素 = []

        for ele in 当前元素:
            try:
                唯一值 = ele.html
            except Exception:
                continue

            if 唯一值 in 已出现元素:
                continue

            已出现元素.add(唯一值)
            新元素.append(ele)

            if 每次最大获取数 != -1 and len(新元素) >= 每次最大获取数:
                break

        if 新元素:
            无新元素计数 = 0

            for ele in 新元素:
                try:
                    # 滚动元素可见
                    ele.scroll.to_see()
                except Exception:
                    pass

                yield ele

            time.sleep(0.5)
            continue

        # 一次找不到约2秒,所以用  元素超时时间/2  控制等待时间
        连续无新元素次数 = float(元素超时时间)//2
        # 没有新元素
        无新元素计数 += 1

        if 无新元素计数 >= 连续无新元素次数:
            break

        # 关键:真实向下滚动
        页面.run_js("window.scrollBy(0, 800)")
        time.sleep(0.8)
        # # 模拟人动行为-如果有风控可以开启-如果有风控可以开启-如果有风控可以开启-如果有风控可以开启
        # # 1️⃣ 正常向下刷(60%)
        # # 2️⃣ 慢慢刷(15%)
        # # 3️⃣ 回滚一下(10%)

是不是感觉代码很简单,没错,就是这么简单。直接调用即可。

完整的代码文件,包括使用示例,以及防风控代码,都在这里边。我放在在这个了,有需要的去下载即可:

链接:https://pan.quark.cn/s/0318337dc57d


收藏18
全部评论1
最新
发布评论
评论