Skip to main content

retail-bot-research

Project description

轻松跳过烦人的人机,实现高效采集数据


注意:模块方法都是封装好的,专过人机检测风控,最好不要随意修改,因为某些参数一旦修改,可能会造成一系列的请求错误,或人机无法绕过的情况,如果有什么问题,可以直接私。

改模块将会持续更新...

使用流程 0.0.4

  1. 安装模块
pip install walmartBot
  1. 导入模块
from walmartBot import WalMart

# 实例化
WalMart = WalMart()

# 直接请求大概率会出人机,需要搭配下面的ip池和令牌
res = WalMart.request('https://www.walmart.com/ip/Skytech-Archangel-Gaming-PC-Desktop-AMD-Ryzen-7-7700-NVIDIA-GeForce-RTX-5060-1TB-Gen4-NVMe-SSD-32GB-DDR5-RAM-Windows-11/17438712331?athAsset=eyJhdGhjcGlkIjoiMTc0Mzg3MTIzMzEiLCJhdGhzdGlkIjoiQ1MwMjAiLCJhdGhhbmNpZCI6Ikl0ZW1DYXJvdXNlbCIsImF0aHJrIjowLjB9&athena=true')
print(res.text)
  1. 代理配置与查看
WalMart = WalMart()

# 设置代理(建议用海外隧道ip池,每次请求自动更换ip)
WalMart.set_proxy('socks5h://127.0.0.1:7898/')
WalMart.set_proxy("socks5h://username:password@ip:port/")

# 删除已设置的代理
WalMart.disable_proxy()

# 查看代理字符串
print(WalMart.current_proxy())

# 查看request使用的代理
print(WalMart.get_requests_proxy())
  1. 获取过人机验证的令牌
import time

WalMart = WalMart()

# 设置ip池
WalMart.set_proxy("socks5h://username:password@ip:port/")

# 获取 _pxvid 令牌(版本二)
# get_pxvid_v2 = WalMart.get_pxvid_v2()

# 获取 _pxvid 令牌(版本三)(最新)
get_pxvid_v3 = WalMart.get_pxvid_v3()

# 获取令牌后,要等待15秒生效(要用海外ip进行获取令牌)
time.sleep(15)

# 使用令牌请求资源
res = WalMart.request(
    url='https://www.walmart.com/ip/Skytech-Archangel-Gaming-PC-Desktop-AMD-Ryzen-7-7700-NVIDIA-GeForce-RTX-5060-1TB-Gen4-NVMe-SSD-32GB-DDR5-RAM-Windows-11/17438712331?athAsset=eyJhdGhjcGlkIjoiMTc0Mzg3MTIzMzEiLCJhdGhzdGlkIjoiQ1MwMjAiLCJhdGhhbmNpZCI6Ikl0ZW1DYXJvdXNlbCIsImF0aHJrIjowLjB9&athena=true',
    cookies={"_pxvid": get_pxvid_v2},
    random_tls=True   # True 启用随机TLS,默认False(根据情况来,如果不随机TLS也能出数据,就不要开启)
)
print(res.text)
# 注意:获取令牌后,最好等待15秒在使用。 1个令牌不能并发请求多个资源,想要并发请求资源可以自己搭建一个令牌池。
# 一个令牌可以请求多个资源,令牌如果失效了,可以存储起来,等待2-5个小时即可恢复使用,具体轮询时间请自测
# 建议请求数据使用socks5h协议代理,该协议支持服务器DNS解析, 并选择好的海外隧道IP池,支持自动更新IP是最好不过的方式。
# 获取令牌 WalMart.get_pxvid_v2(proxies={...}) 也可以自己设置独立的ip去请求令牌。

使用场景如下(非登陆模式)

  1. 产品数据的采集(主要功能)
from walmartBot import WalMart
# 实例化
WalMart = WalMart()
# 设置ip池,最好是隧道代理
WalMart.set_proxy("socks5h://username:password@ip:port/")
# 请求获取数据
res = WalMart.request('https://www.walmart.com/ip/Skytech-Archangel-Gaming-PC-Desktop-AMD-Ryzen-7-7700-NVIDIA-GeForce-RTX-5060-1TB-Gen4-NVMe-SSD-32GB-DDR5-RAM-Windows-11/17438712331?athAsset=eyJhdGhjcGlkIjoiMTc0Mzg3MTIzMzEiLCJhdGhzdGlkIjoiQ1MwMjAiLCJhdGhhbmNpZCI6Ikl0ZW1DYXJvdXNlbCIsImF0aHJrIjowLjB9&athena=true')
# 拿到数据
print(res.text)
  1. 订单信息的采集
import random
import re
import time
from walmartBot import WalMart

def get_tracking_cookie(tracking_id) -> dict:
    i = 0
    while i < 3:
        res = WalMart.request(f'https://www.walmart.com/tracking?tracking_id={tracking_id}')
        get_dict = res.cookies.get_dict()
        time.sleep(1)
        i += 1
        if len(get_dict) > 5:
            return get_dict

def get_tracking_data(cookie, tracking_id) -> dict:
    headers = {
        "accept": "*/*",
        "referer": f"https://www.walmart.com/tracking?tracking_id={tracking_id}&language=en",
        "Wm_consumer.Id": "27909687-61fa-401e-b321-27da8fa30291",
        "Wm_svc.Env": "prod2.0.0",
        "Wm_svc.Name": "HALO-DECK-CLIENT"
    }
    res = WalMart.request4(f'https://www.walmart.com/api/tracking?trackingId={tracking_id}&language=en',
                           headers={**WalMart.headers(''), **headers},
                           cookies=cookie
                           )
    try:
        res_data = res.json()
        return res_data
    except:
        print(f'错误html - {tracking_id}')

if __name__ == '__main__':
    # 实例化
    WalMart = WalMart()
    # 设置代理
    WalMart.set_proxy("socks5h://t16233522400727:gj7yv093@u980.kdltpspro.com:15818/")
    # 订单号
    tracking_ids = ['1LSCXLNA012957153', '1LSCXLNA012630543', '1LSCXLNA012279691', '1LSCXLNA012444333', '1LSCXLNA012958930', '1LSCXLNA012976471']
    for tracking_id in tracking_ids:
        # 获取cookie
        cookie = get_tracking_cookie(tracking_id)
        # 请求获取订单信息(高并发可能会出现其他小问题,如果请求报错,可以重试任务即可,整个流程可以稳定运行,成功率在80%以上,具体数据自己测)
        print(get_tracking_data(cookie, tracking_id))

注意!!!

  1. 请试用socks5h协议代理,该协议支持服务器DNS解析
  2. 请试用海外隧道IP池,稳定性强,防风控强
  3. 本地试用的翻墙也要稳定,不要使用不稳定机场或节点,否定可能会请求失败报错等... 该风控可能由两种情况引起,一个是header检测,另一个是tls检测。 目前已解决header检测风控,测试后发现可以正常获取数据,如果多线程获取数据任然平凡出现风控,请联系我,我将添加tls指纹功能

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

walmartbot-0.0.4.tar.gz (28.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

walmartbot-0.0.4-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file walmartbot-0.0.4.tar.gz.

File metadata

  • Download URL: walmartbot-0.0.4.tar.gz
  • Upload date:
  • Size: 28.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for walmartbot-0.0.4.tar.gz
Algorithm Hash digest
SHA256 ca4680b8f9d52e8e8d876b4d29ed5c0cdbe437a24b1412a5a0c10067c834507e
MD5 aaf3d1dcdd187e2a5e3a41679d5c7470
BLAKE2b-256 5baa2201ddb0e7cb201f23db961b224ebac9ae5e62acf10595be8bc75292eec6

See more details on using hashes here.

File details

Details for the file walmartbot-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: walmartbot-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for walmartbot-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e4e732721202cfef5bdda2098d34d7e2b9c2a4d206688ee31b062242e10f82b5
MD5 8dfc201c245027c951b9306658207de7
BLAKE2b-256 0327f4a1011286ef66b43b0d78185f27b9cc2c4a319ceed41345c9335e802799

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page