一个关于爬虫的抢购软件优化问题 - V2EX
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 7259 次点击
    这是一个创建于 2563 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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  
    OP
       2018-12-01 17:31:53 +08:00
    @fenghuang 然鹅这个网站的规则是先付款的才可以抢购成功,生单成功之后只是为了拿到支付链接的 url,实际还是得看最终支付时间,我感觉和某宝差的也只是毫秒级上的,但是每次都干不过,都会在成功付款之后退回。
    snal123
        3
    snal123  
       2018-12-01 17:37:10 +08:00 via iPhone
    pyexecjs 其实挺慢的 这里优化空间挺大的
    /td>
    wc110302
        4
    wc110302  
    OP
       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 吧
    4BVL25L90W260T9U
        14
    4BVL25L90W260T9U  
       2018-12-02 19:12:41 +08:00
    换 pyppeteer 吧
    wc110302
        15
    wc110302  
    OP
       2018-12-02 22:59:15 +08:00
    @locoz 是用 pyexecjs 来加载目标网站的 js 实现对密码的加密
    wc110302
        16
    wc110302  
    OP
       2018-12-02 23:00:15 +08:00
    @csx163 刚刚进行了测试 实际上完成密码加密那一步用了 150ms 不知道如果使用其他方式会不会更快一点
    wc110302
        17
    wc110302  
    OP
       2018-12-02 23:03:00 +08:00
    @crab
    @AX5N
    经过 http://ping.chinaz.com/ 测试 目标网站在浙江节点下延迟最低 1-5ms 所以在进行抢购的时候买了一台杭州的 windows server 2008 顶配 按理说应该是延迟最低的情况下了
    wc110302
        18
    wc110302  
    OP
       2018-12-02 23:04:43 +08:00
    @whoami9894
    @zr8657
    用 selenium 模拟登录只是为了拿 cookie,在抢购的时候提前几分钟拿到就行了,如果每次抢购都还去登录的话,耗时就更长了
    wc110302
        19
    wc110302  
    OP
       2018-12-02 23:06:06 +08:00
    @fenghuang 其实也怀疑过是语言的原因 但是 C 的话自己也写不出来--! 也许用 C 写的话能够提升一部分时间吧
    wc110302
        20
    wc110302  
    OP
       2018-12-02 23:07:48 +08:00
    @ospider 这个模块还没用过 速度相较于 requests 会更快一点吗
    wc110302
        21
    wc110302  
    OP
       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  
    OP
       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  
    OP
       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  
    OP
       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  
       2020-09-17 13:19:49 +08:00
    请问下楼主还在做吗?可以交流下,我也做出来差不多的,但是也是抢不到
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     786 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 21:34 PVG 05:34 LAX 13:34 JFK 16:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86