Python爬虫中淘宝详情页销量的反爬策略是如何实现的?使用代理池仍被ban怎么办?

  1. 抓取淘宝商品月销量,使用淘宝页面的[detailskip.taobao.com],进行抓取。
  2. 有使用稳定的代理池,每隔一段时间更换。
  3. 如果对爬虫请求来说,如果我请求的每次 ip 地址都不一样,还会被 ban。那这个原因是什么?是需要带 cookie 去访问,还是淘宝使用了行为分析一类的策略?
  4. 帮忙一起分析下目前淘宝的反爬策略,谢谢!

Python爬虫中淘宝详情页销量的反爬策略是如何实现的?使用代理池仍被ban怎么办?

50 回复

目前发现 Amazon,也是这样的。使用了代理 ip 去请求,一段时间后,就会让你输入验证码。即使立即更换 ip,也不让访问。


淘宝详情页的销量反爬通常结合了动态数据加载、请求参数加密和用户行为分析。直接请求得到的HTML里销量数据经常是空的,真实数据通过接口异步加载,且接口参数(如_m_h5_tkt等)经过加密,并校验Cookie和Referer。单纯用代理IP绕过频率限制不够,因为淘宝还会检测单个IP的请求模式和行为特征。

如果用了代理池还被封,大概率是请求的“行为”不像真人。试试下面这个方案,重点模拟浏览器的完整行为链:

import requests
import time
import random
from urllib.parse import quote

def get_taobao_item_sales(item_id, proxy=None):
    """
    获取淘宝商品销量(示例,加密逻辑需逆向最新页面)
    """
    headers = {
        'authority': 'h5api.m.taobao.com',
        'accept': 'application/json',
        'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
        'referer': f'https://detail.m.tmall.com/item.htm?id={item_id}',
        'accept-language': 'zh-CN,zh;q=0.9',
    }
    
    # 关键:需要从页面或之前请求中提取加密参数(此处为示例占位)
    # 实际需要解析页面获取 _m_h5_tk、data等参数
    params = {
        'id': item_id,
        'detail_v': '3.3.2',
        'exParams': '{}',
        'type': 'json',
        'api': 'mtop.taobao.detail.getdetail'
    }
    
    # 随机延迟模拟阅读时间
    time.sleep(random.uniform(1, 3))
    
    try:
        resp = requests.get(
            'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/',
            params=params,
            headers=headers,
            proxies=proxy,
            timeout=10
        )
        resp.raise_for_status()
        data = resp.json()
        
        # 解析销量数据(路径根据实际接口调整)
        sales = data.get('data', {}).get('item', {}).get('sellCount', 'N/A')
        return sales
    except Exception as e:
        print(f"请求失败: {e}")
        return None

# 使用示例(需自行维护代理池列表)
proxy_pool = [
    {'http': 'http://user:pass@ip:port', 'https': 'https://user:pass@ip:port'},
    # ... 更多代理
]
item_id = '1234567890123'
proxy = random.choice(proxy_pool)
sales = get_taobao_item_sales(item_id, proxy)
print(f"商品销量: {sales}")

关键点:

  1. 完整请求链:带上合理的Referer(从商品页跳转过来)、Accept、Language等头部。
  2. 参数逆向:销量接口参数需要从页面JavaScript中逆向加密逻辑(比如_m_h5_tk的生成),这部分需要抓包分析最新规则。
  3. 随机延迟:在关键操作间加入随机等待,模拟真人浏览间隔。
  4. 会话保持:建议使用requests.Session()维持Cookie,并先访问几次首页再跳详情页。
  5. 代理质量:确保代理IP纯净度高,最好用住宅代理,并定时测试可用性。

总结:核心是让每个请求看起来都像是一次独立的人工浏览行为。

估计是代理 IP 被记录了吧。

这个可能性会有。但是我是使用 asdl 自建的代理池,IP 重复的概率不会很大。

useragent ip cookie referer 等特征结合着来

估计这些 ip 结合历史记录看 早就在黑名单了吧

1.ip 被拉黑
2,协议头长期没变

我天天浏览车托之家,也经常弹出个验证框,估计也把我当成了代理爬虫

使用的什么爬虫?
请求头 Cookie 之类的分析了吗?
动态爬虫之类的用了没?

似乎在哪里有人说过,淘宝反爬用的逻辑回归做判断。 也就是说 ip,浏览器信息,浏览行为都会是判断因素。
比如,如果一直只浏览某个页面, 那 99%是爬虫了。 所以需要模拟用户真实的浏览行为。

ip,cookies,referer…
还有检查一下爬虫有没有进到蜜罐里面

有可能会根据访问频率判断,也可能你访问了只有爬虫才会访问到的隐藏链接。

就换个 IP 就行了? 你开玩笑吧。。

你登录了吧 爬一会会强制登录的.

ip 更换频率?分钟级的?

目前是 12 个 ip 地址,ip 地址是 5 分钟轮流更换一次,使用随机的 user-agent,header+referer 访问,没使用 cookie。但是即使更换了 ip 地址,这个 ip 地址还是会被 ban。

要么你换出来的 ip 已经再黑名单,要么特质太过明显

您能说下,这个请求的特质,具体点是什么?我现在使用的 header 是随机,ip 地址也是代理随机拨号的。

你 IP 5 6 分钟切换一次,header 随机,这就有可能在出现下面的情况:

同一个 ip 在 5 6 分钟内的访问,每次 header 都特么不一样。

你说这算不算特征?

如果按照您的说法,我一个公司就一个出口 ip,如果有几十个人同时在访问淘宝,这也是算是同 ip,不同 header 访问,但是并不会被 ban。可能并不会是这个原因导致的。

X-Forwarded-for ?
你都用上拨号了,ip 怎么才这么少,不是每次拨号都会变么。

MAC 地址你的是固定的,但是你的 header 随机,不查你查谁= =

预算问题。只有少量的 asdl 的拨号服务。所以 ip 地址更换的并不会很快,但是每次拨号会改变 ip 地址。

这个确实是个问题,谢谢您!

X-Forwarded-for 这个也可能是追踪到了原始 ip,谢谢您!

网页得不到 mac 地址吧

请问一下用户的 MAC 地址是可以获取的吗?

同问 用什么办法可以获取到 MAC 地址

网页得到 mac 地址?
记得谷歌也是这样。换 ip 已经没用了。有人用 py 包调 IE 浏览器模拟用户请求还是一样被 ban,觉得是不是页面 JS 获取了用户鼠标事件等判断?

大概率是触发蜜罐了吧 或者是页面检测了鼠标轨迹 我碰到过 打开页面会先加载反爬 js 然后检测鼠标,不通过就不允许后续接口请求

mac 地址从报文中是获取不到的,路由每一跳都会更换 mac 头

貌似确认获取不到 mac 地址,可参考 http://www.jianshu.com/p/61b1506e4c0f。

除了 ie 使用 ActiveX 能获取 mac 以外,浏览器无法获取 mac 吧?不然不符合浏览器的安全协议了。

这个是一个可能的原因,谢谢您!

几十个人同时访问淘宝也不可能出现每个 ip 每个请求的 header 都随机吧。

同一个 ip header 有不同是正常的,但是没有一个相同的就是不正常了

所以随机 UA 这东西是谁想出来的?
你不去模拟真实的用户,或者你自己都不知道真实的用户行为是怎样的,不被封才怪了。

淘宝 ua 我有个建议,测试发现 ie 浏览器的 ua 可以有效避免验证码

可以考虑用 selenium+chrome 的方式爬取呢。
目前我用公司的 ip 地址,爬 1000 条没有要求登录。猜测可能是公司人比较多,所以同一个 ip 经常会有不同的人登录或者不登录访问淘宝。
如果用代理,爬个 10 几条就需要登录,但是用密码加短信验证码的方式登录后,再爬取 1000 多条都没有限制。

尽可能模拟真实用户提交的数据,而不是尽可能的随机

你的 IP 不是民用的吧,可以反向解析

试试民用宽带,ADSL 拨号换 IP

小伙,我这么给你说。就算不用爬虫,我们普通用户上去只要逛的多一点,也常常让我输入坑爹的验证信息。

也许人家的策略比你认为的还暴力。

刷单的都让在页面上停留 30s,还要下拉到最后,所以他们的策略很细的。

我家電信,公網 ip, 整天讓我輸入驗證碼,煩得我都不樂意買了。
京東從來不需要輸驗證碼

關鍵是,輸入一次以後,如果不換 ip,就不應該再重複讓用戶輸入。可事實上,他會持續讓你輸入,每個商品都讓你輸一次,真的不懂怎麼個思路

这个你也遇到了?如果是真的,我前段时间就这样,幸亏我不怎么买东西。我是大半年没有开过 TB,再打开 TB,貌似就没问题了。因为路由器常年在线,所以 IP 一直是同一个公网 ip。

经常这样,特别是傍晚到半夜这段时间. 淘宝 /天猫 /飞猪,都这样.
没有什么真的假的,我又不是京东员工,黑淘宝作甚

另外, 我登录支付宝, 是 100%要求短信验证! 即便喝口水回来的功夫, 也会登录失效, 并要求再次使用短信验证码登陆. 我觉得这些人就是故意的, 强迫你使用 APP.
以前我还会用花呗买东西, 现在都不乐意用了, 因为电脑上不给你对账, 你根本不知道上个月买了什么东西, 数额对不对. 用手机来对账, 在我看来非常脑残, 不仅不能一个屏幕上开计算器, 也没有数字小键盘, 而且反复上下拖动屏幕带来的拖尾效果会让眼镜很不舒服

小伙别急,我又没怀疑你。我只是想确定你和我是否一样的遭遇,毕竟我没有 1000w

你们说的蜜罐是啥?

回到顶部