V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wc110302
V2EX  ›  Python

一个关于爬虫的抢购软件优化问题

  •  
  •   wc110302 · 2018-12-01 17:19:47 +08:00 · 4842 次点击
    这是一个创建于 779 天前的主题,其中的信息可能已经有所发展或是发生改变。

    整体的抢购逻辑流程如下:

    1.使用 selenium 模拟登陆拿到账号的 cookie 信息并保存

    2.获取目标抢购角色的网页链接以及价格(发送生单请求时需要这两个参数)

    3.完成生单之后进行支付,即发送支付请求

    4.在进行支付请求时,需要拿到订单号,然而这里涉及到两个重定向,于是使用 allow_redirects=false,获取到正常的 cookie 进行下一步操作

    5.在支付页面,需要发送支付请求,即输入密码后发送 post 请求,这里涉及到 md5+aes 加密,这里略过,js 是已经趴下来使用 pyexesjs 模拟,公钥是直接贴在支付页面的静态 html 里的,每次支付都会变化,所以已经没有步骤可以省略了

    然后整个流程,在本机跑下来,大概是 1.8S ,其中生单 0.4S ,在浙江的服务器上,因为目标网站是搭在浙江的,ping 值理论是最小的,能够达到 1.0-1.3S 。但是这个速度根本无法抢购到目标角色,因为某宝已经能达到控制在 1S 以内,具体是多少 ms 不清楚。如下图

    https://i.imgur.com/BTiutdQ.png

    而我现在只能达到 1S+的速度 当然应该就是抢不到 虽然能够扣款成功 但是都会被退回

    https://i.imgur.com/dms91fC.png

    现在也不知道能有什么好的办法能够优化一下 加快速度了 确实也仔细看了 抓包下来 每个请求都仔细分析过 已经是没有可以省略的步骤了 但是为啥还是干不过某宝的那些人了 确实是很奇怪

    37 条回复    2020-09-17 13:19:49 +08:00
    fenghuang
        1
    fenghuang   2018-12-01 17:26:13 +08:00
    抢购的时候快就行了,难道支付也需要很快?
    wc110302
        2
    wc110302   2018-12-01 17:31:53 +08:00
    @fenghuang 然鹅这个网站的规则是先付款的才可以抢购成功,生单成功之后只是为了拿到支付链接的 url,实际还是得看最终支付时间,我感觉和某宝差的也只是毫秒级上的,但是每次都干不过,都会在成功付款之后退回。
    snal123
        3
    snal123   2018-12-01 17:37:10 +08:00 via iPhone
    pyexecjs 其实挺慢的 这里优化空间挺大的
    wc110302
        4
    wc110302   2018-12-01 17:46:54 +08:00
    @snal123 我这里使用的是 pyexecjs+node.js 来模拟生成加密后的密码报文的,由于加密数据是由 CryptoJS 加密的,重构成其他语言的代码不太现实 请问一下有什么好的方法推荐吗
    locoz
        5
    locoz   2018-12-01 20:31:37 +08:00 via Android
    直接拿 nodejs 写?
    zy8595208
        6
    zy8595208   2018-12-01 20:45:31 +08:00 via Android
    抢购什么的,这么变态,还有看付款时间的
    Pionxzh
        7
    Pionxzh   2018-12-01 21:35:41 +08:00
    这都抢不到? 也太变态了点
    csx163
        8
    csx163   2018-12-01 21:39:33 +08:00
    可能淘宝的那些都用 c 吧,或者你试试 go
    一般的加密 PyCrypto 都可以解决,试试看
    crab
        9
    crab   2018-12-01 21:48:52 +08:00
    1 秒内的差距就是运气。多买几台不同节点的服务器。
    whoami9894
        10
    whoami9894   2018-12-02 10:42:26 +08:00 via Android
    selenium 实例化一个浏览器这么快吗 我电脑上都是 5s+
    fenghuang
        11
    fenghuang   2018-12-02 10:50:14 +08:00
    @wc110302 这种速度估计 python 就不行了
    AX5N
        12
    AX5N   2018-12-02 13:46:18 +08:00
    这种脚本一般是在家还是在服务器上跑的,会不会是家庭宽带延迟比较大。
    zr8657
        13
    zr8657   2018-12-02 14:11:01 +08:00
    @whoami9894 我的和你差不多速度,3-5S 吧
    ospider
        14
    ospider   2018-12-02 19:12:41 +08:00
    换 pyppeteer 吧
    wc110302
        15
    wc110302   2018-12-02 22:59:15 +08:00
    @locoz 是用 pyexecjs 来加载目标网站的 js 实现对密码的加密
    wc110302
        16
    wc110302   2018-12-02 23:00:15 +08:00
    @csx163 刚刚进行了测试 实际上完成密码加密那一步用了 150ms 不知道如果使用其他方式会不会更快一点
    wc110302
        17
    wc110302   2018-12-02 23:03:00 +08:00
    @crab
    @AX5N
    经过 http://ping.chinaz.com/ 测试 目标网站在浙江节点下延迟最低 1-5ms 所以在进行抢购的时候买了一台杭州的 windows server 2008 顶配 按理说应该是延迟最低的情况下了
    wc110302
        18
    wc110302   2018-12-02 23:04:43 +08:00
    @whoami9894
    @zr8657
    用 selenium 模拟登录只是为了拿 cookie,在抢购的时候提前几分钟拿到就行了,如果每次抢购都还去登录的话,耗时就更长了
    wc110302
        19
    wc110302   2018-12-02 23:06:06 +08:00
    @fenghuang 其实也怀疑过是语言的原因 但是 C 的话自己也写不出来--! 也许用 C 写的话能够提升一部分时间吧
    wc110302
        20
    wc110302   2018-12-02 23:07:48 +08:00
    @ospider 这个模块还没用过 速度相较于 requests 会更快一点吗
    wc110302
        21
    wc110302   2018-12-02 23:09:36 +08:00
    @Pionxzh 确实是这样的 自己尝试了好几次都无法成功 以前其实也写过这种抢购软件的 但是是用来抢购那种用库存的 一般情况下都是能抢到的 但是这次这个是抢购单个角色 所以必须达到第一才能够抢到 某宝的技术团队应该是工作室之内的吧 各种大牛云集 干不过
    locoz
        22
    locoz   2018-12-03 10:41:07 +08:00 via Android
    @wc110302 #15 你理解错了,我说的是你直接拿 nodejs 写一个试试
    xzbo
        23
    xzbo   2019-01-31 08:49:04 +08:00
    老哥,你写的这个藏宝阁爬虫卖吗
    wc110302
        24
    wc110302   2019-01-31 09:51:21 +08:00
    @xzbo 看了下你的注册时间-- 你是看到我的帖子专门注册的账号吗? 其实脚本逻辑不难 GUI 那方面倒是花了不少功夫
    xzbo
        25
    xzbo   2019-01-31 10:01:02 +08:00
    @wc110302 是的看你帖子注册的,自己看中几只阴阳师的账号,无奈别人都是软件再抢,手动根本抢不到,emmm......
    xzbo
        26
    xzbo   2019-01-31 10:03:17 +08:00
    @wc110302 我自己写了一下,到最后订单支付这一块卡主了,数据加密不知道怎么破解
    xzbo
        27
    xzbo   2019-01-31 10:05:51 +08:00
    @wc110302 门外汉有点不知所措。。。望大佬指点迷津,或者出售给我
    wc110302
        28
    wc110302   2019-01-31 10:10:01 +08:00
    @xzbo 你可以留下你的联系方式~~~ 阴阳师那个我前两天才更新了 hhhhhh
    xzbo
        29
    xzbo   2019-01-31 10:12:35 +08:00
    @wc110302 VX 595434709
    molake
        30
    molake   2019-03-05 10:17:35 +08:00
    老哥,最近公司也要做个爬虫抢购,java 能开发嘛?之前没做过,求指教啊
    wc110302
        31
    wc110302   2019-03-05 11:27:28 +08:00
    @molake 当然可以开发了 理论上就是抓包分析写代码 python 能做的 java 当然也能做
    molake
        32
    molake   2019-03-05 17:25:20 +08:00 via Android
    @wc110302 主要是,抢购的话都是毫秒级别的差距,java 自身执行逻辑就比 py 慢一丢,不知道做出来可有 py 快啊,开发工期卡得紧
    himaozi
        33
    himaozi   2019-03-17 10:11:36 +08:00
    老哥,能留个联系方式,讨论下吗~
    himaozi
        34
    himaozi   2019-03-17 10:38:16 +08:00
    我的联系方式 vx 513893049
    fangli
        35
    fangli   2019-03-27 18:52:56 +08:00
    交流一下。。vx 18811447074
    luzhizheng
        36
    luzhizheng   2019-12-21 13:57:36 +08:00
    这楼主是一个搞外包的,大家不要给骗了,加了 QQ 以后一直在忽悠,没两句就开始装逼,然后要我搞外包.
    技术问题一个都不回答,问什么都说很简单自己搞,要不然就找我外包,真是没见过这种人,一点想探讨的精神都没有,还跟我装起逼来,说多了就开始骂我菜鸡,菜鸟,真的是给点阳光就灿烂,懂一点就开始装逼,你爸妈没有教过你做人的道理吗?真是悲哀.
    newyear012
        37
    newyear012   123 天前
    请问下楼主还在做吗?可以交流下,我也做出来差不多的,但是也是抢不到
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3599 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 10:56 · PVG 18:56 · LAX 02:56 · JFK 05:56
    ♥ Do have faith in what you're doing.