python 爬虫求助 - 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
wudaown
V2EX    Python

python 爬虫求助

  •  
  •   wudaown 2015-06-27 21:30:15 +08:00 8971 次点击
    这是一个创建于 3759 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想用python写一个yunfile的下载器.. 或者叫爬虫?
    思路挺简单的.. 下载链接分析转页目前到了验证码的一部分..
    已经把验证码下载下来了..
    chrome f12里面就什么都没有了..
    就是输入完验证码之后点击进入下载.. 然后什么都没有!!!30秒过了还是什么都没有!!
    完全不知道下一步该怎么办了...

    代码如下

    https://gist.github.com/wudaown/89256fadba79236ec68f

    第 1 条附言    2015-06-27 22:17:36 +08:00
    简单来说就是我模拟不出发送验证码然后跳转的那一段代码.....
    第 2 条附言    2015-06-27 22:35:13 +08:00
    又貌似 好像是js脚本搞的鬼..
    麻烦大家给我个思路.. 我可以继续研究...
    62 条回复    2015-07-01 14:24:43 +08:00
    wudaown
        1
    wudaown  
    OP
       2015-06-27 21:32:57 +08:00
    https://gist.github.com/wudaown/89256fadba79236ec68f

    为什么在上面不能发代码.... 什么鬼....
    em70
        2
    em70  
       2015-06-27 21:56:08 +08:00 via Android
    说明验证码错误了吧,人家系统知道你在破解,不给你返回任何错误信息
    wudaown
        3
    wudaown  
    OP
       2015-06-27 22:01:25 08:00
    @em70 不科学.. 我用浏览器正常操作没有然后在develop tools里面有看到任何返回.. 你没明白我的意思么.........
    crab
        4
    crab  
       2015-06-27 22:41:12 +08:00
    时间到这个js redirectDownPage() 控制跳转的
    wudaown
        5
    wudaown  
    OP
       2015-06-27 22:48:10 +08:00
    @crab 我也是看到这段才开始怀疑js的.. 然后我就不知道该怎么继续下去了... 还有就是输入框也没有找到..
    crab
        6
    crab  
       2015-06-27 23:39:21 +08:00
    @wudaown 我不懂 Python 。
    刚才试了下流程,就是先请求下文件下载页面,获取 fileid,再请求 验证码。
    输入验证码后,延迟30秒,再请求文件调整页面链接。这个链接要自己构造
    比如你代码提供的就是这个: http://p1.yunfile.com/file/down/wushangzhikong/3a40b126/0105.html
    3a40b126 是 fileid
    0105 是验证码
    请求过去后返回的数据匹配下:form.setAttribute("action",saveCdnUrl+"这边就是文件下载真实地址");
    crab
        7
    crab  
       2015-06-27 23:43:15 +08:00
    上面那个匹配是保存的。下载文件是一个 POST。
    <form style="width:1060px;" class="tform" id="d_down_from
    module:fileService
    action:downfile
    userId:wushangzhikong
    fileId:3a40b126
    vid:86d11777
    vid1:a11ded7c93db2928
    md5:b28f5d1212a83443229f8df8993bee34
    wudaown
        8
    wudaown  
    OP
       2015-06-27 23:44:08 +08:00
    @crab 感谢~ 流程我看了下页面源码也 明白了 .. 现在去学一些js ... 现学现做..
    wudaown
        9
    wudaown  
    OP
       2015-06-27 23:45:02 +08:00
    @crab 这里vid和vid1是指向什么没看出来.. 构造链接看明白了
    crab
        10
    crab  
       2015-06-27 23:48:25 +08:00
    @wudaown 跳转过去的那个页面有这2个参数的值,vid 是 vericode 这个,vid1 都直接在 form 了
    wudaown
        11
    wudaown  
    OP
       2015-06-27 23:51:12 +08:00
    @crab 具体是那个js文件呢.. 完全不了解 现在一头雾水了..
    crab
        12
    crab  
       2015-06-27 23:54:05 +08:00
    @wudaown 不是在js啊。如果你 fileid 和 验证码 都对,30秒后请求这2参数构成的 URL,页面得到的数据就包含上面那些参数了啊。
    wudaown
        13
    wudaown  
    OP
       2015-06-27 23:55:03 +08:00
    @crab 那不是不需要js .. 只要post一次验证码和fileid就可以等返回 然后在请求一下构成的url?
    crab
        14
    crab  
       2015-06-27 23:56:59 +08:00
    @wudaown 我测试是 get 一次下载页面先,再get 一次验证码,get 一次 file&验证码.html ,最后 post 下载。
    wudaown
        15
    wudaown  
    OP
       2015-06-28 00:00:56 +08:00
    @crab get验证码和id 可是像哪里post这两个?
    crab
        16
    crab  
       2015-06-28 00:06:56 +08:00
    @wudaown 延迟30秒后,访问 get 一次 file&验证码.html,这个页面里面的源码,有个 POST 就是下载那个按钮的。你直接 POST 这边,参数也这个页面提取。
    wudaown
        17
    wudaown  
    OP
       2015-06-28 00:09:33 +08:00
    @crab 方便用我代码里的链接给我看一下那个按钮的post嘛.. 没找到........
    crab
        18
    crab  
       2015-06-28 00:15:24 +08:00
    @wudaown
    Javascript:{ck();document.getElementById('hidebtn').click();}
    搜索:hidebtn
    http://img-storage.qiniudn.com/15-6-28/76058268.jpg
    wudaown
        19
    wudaown  
    OP
       2015-06-28 00:18:40 +08:00
    @crab 非常感谢.. 这些够我研究一晚了~ ~~
    berry10086
        20
    berry10086  
       2015-06-28 00:30:29 +08:00 via Android
    我只想说,为什么不用requests
    wudaown
        21
    wudaown  
    OP
       2015-06-28 00:35:43 +08:00
    @berry10086 能说一下思路么..
    wudaown
        22
    wudaown  
    OP
       2015-06-28 03:08:30 +08:00
    @crab 看了半天 你提到的内容都找到了.. 不过还是没有办法从验证码跳转到下载页面.. 还是没有办法提交验证码.. 你最后提到的那个按钮是在跳转后的页面.. 跳转的过程还是没有找到..
    Axurez
        23
    Axurez  
       2015-06-28 03:39:24 +08:00
    gist 为什么不加后缀名。。
    wudaown
        24
    wudaown  
    OP
       2015-06-28 04:20:22 +08:00
    @Axurez 据说不加后缀可以直接显示代码....
    imn1
        25
    imn1  
       2015-06-28 11:03:45 +08:00
    我怎么感觉你只是调试程序,没有抓包?
    p1n3
        26
    p1n3  
       2015-06-28 11:43:37 +08:00
    楼主,一楼的button是怎么出来的呢?
    Axurez
        27
    Axurez  
       2015-06-28 12:02:01 +08:00
    @wudaown 这样。。可是看起来并没有呢,而且还没有语法高亮了。
    wudaown
        28
    wudaown  
    OP
       2015-06-28 12:47:41 +08:00
    @imn1 在代码后面加个 a = opener() ; a.userAgent() ;a.imageHeader(); a.captchaOpener() 就看到结果了
    wudaown
        29
    wudaown  
    OP
       2015-06-28 12:51:42 +08:00
    @Axurez 没有后缀.... 现在好了
    imn1
        30
    imn1  
       2015-06-28 12:56:21 +08:00
    @wudaown
    也就是说没有抓包分析ajax了
    crab
        31
    crab  
       2015-06-28 14:53:52 +08:00
    @wudaown
    1:Winhttp GET “http://p1.yunfile.com/fs/3wusahan4gzh0ikobng1268/"
    取出 fileid

    2:Winhttp GET “http://p1.yunfile.com/verifyimg/getPcv.html”
    输入验证码

    延迟30秒

    3:Winhttp GET “http://p1.yunfile.com/file/down/wushangzhikong/fileid/验证码.html”
    取出 form

    4: Winhttp POST “http://dl212.yunfile.com/view?fid="+上面 form 地址 参数也是 form
    erichuang1994
        32
    erichuang1994  
       2015-06-28 14:56:50 +08:00
    妹子为什么搞那两个站(K站 等)爬虫?
    wudaown
        33
    wudaown  
    OP
       2015-06-28 15:04:47 +08:00
    @crab 第二步.. 是GET.. 是不是取出验证码对于的图片么.. 为什么变成输入验证码了?
    cc7756789
        34
    cc7756789  
       2015-06-28 15:20:09 +08:00   1
    你的类构造的很有问题,导致完全没法分析,有些属性应该放进__init__
    怀疑是你的代码把网页进行了刷新,导致你获取的验证码和当前网页不一致,而且你该贴出来你是怎么调用类的, 如果你不会使用类的话那么老老实实用函数的好,这是我登陆豆瓣的例子,也有验证码,https://github.com/ZhangHang-z/dung_beetle/blob/master/login_douban1.py
    crab
        35
    crab  
       2015-06-28 15:20:10 +08:00
    @wudaown 取出来图片验证码,输入验证码,保存到个变量去。变量再给第3步骤啊。
    wudaown
        36
    wudaown  
    OP
       2015-06-28 15:24:39 +08:00
    @cc7756789 就是不熟悉才要联系学习吧.. __init__ 考虑过.. 现在不准备放.. 想先完整工作最后全部修改
    wudaown
        37
    wudaown  
    OP
       2015-06-28 15:25:08 +08:00
    @cc7756789 打击新人信心....
    wudaown
        38
    wudaown  
    OP
       2015-06-28 15:26:27 +08:00
    @crab 就是说Winhttp GET “http://p1.yunfile.com/verifyimg/getPcv.html” 这一步就相当于输入验证码 只要等待30秒?然后直接到Winhttp GET “http://p1.yunfile.com/file/down/wushangzhikong/fileid/验证码.html”?
    crab
    39
    crab  
       2015-06-28 15:31:00 +08:00
    @wudaown 是的。
    wudaown
        40
    wudaown  
    OP
       2015-06-28 15:31:28 +08:00
    @crab 感谢~ 我去试试看..
    wudaown
        41
    wudaown  
    OP
       2015-06-28 15:59:52 +08:00
    @crab 额.. 失败了.. 直接被跳转到第一页去了.. 搞不明白哪里出错了..
    wudaown
        42
    wudaown  
    OP
       2015-06-28 16:06:24 +08:00
    @crab 用fiddle看是被302跳转了..
    endoffight
        43
    endoffight  
       2015-06-28 16:26:53 +08:00 via Android
    楼主下完片记得和我们v友分享啊
    wudaown
        44
    wudaown  
    OP
       2015-06-28 16:36:09 +08:00
    @endoffight 我感觉要放弃了... 这我都搞不定..
    endoffight
        45
    endoffight  
       2015-06-28 17:51:34 +08:00 via Android
    @wudaown 给我描述一下你的进度和问题
    RitzoneX
        46
    RitzoneX  
       2015-06-28 18:21:19 +08:00
    之前写过程序来刷下载流量,感觉yunfile很坑人,扣流量严重,对IP有限制
    有时验证码输入正确,却跳回第一页,让你继续输验证码。。
    wudaown
        47
    wudaown  
    OP
       2015-06-28 18:48:53 +08:00 via iPhone
    @endoffight 感谢.. 想实现通过脚本读取预先保存的链接下载文件..
    目前进度.. 读取链接之后取得验证码,没有找到途径提交验证码..
    我贴出来的代码实现了读物和下载验证码.. 查看header发现验证码应该是对应其中一个referer header的
    wudaown
        48
    wudaown  
    OP
       2015-06-28 18:49:38 +08:00 via iPhone
    @RitzoneX 能提供源码吗?说不定能看出一些内容 谢谢
    crab
        49
    crab  
       2015-06-28 19:06:16 +08:00
    @wudaown 这个验证码不用提交的。验证码的作用只是给后面那个链接组合的。
    302 跳转回去,要么是 Cookies ,要么是 referer 出问题了,我不清楚你这边用 Python 对 Cookies 是怎么处理的。昨天我测试直接没访问第一个请求的主页,直接请求验证码,指定 fileid,也是被302。
    wudaown
        50
    wudaown  
    OP
       2015-06-28 19:15:42 +08:00
    @crab 不访问第一个页面直接请求验证码我也试过 确实可以通过.. cookie和referer我抄录了昨天用fiddle抓取的.. 今天直接用了还是被302了.. 嘛 如果确定是cookie和referer的话 起码我清楚往哪个方向继续了..
    crab
        51
    crab  
       2015-06-28 19:24:20 +08:00
    @wudaown def imageHeader 这个里面你是不是指定了 cookies?你别指定 cookies,就第一次访问页面,返回 cookies 保存起来,第2次继续用。
    wudaown
        52
    wudaown  
    OP
       2015-06-28 19:25:50 +08:00
    @crab 我去试试看.. 貌似jsessonid每次都会变.. 我预置的话 貌似不能用
    crab
        53
    crab  
       2015-06-28 19:30:19 +08:00
    @binux 你有时间的话,帮他看看吧。
    wudaown
        54
    wudaown  
    OP
       2015-06-28 19:34:32 +08:00
    @crab 话说这贴留到下周还会有人看到么.. 马上要出发了.. 我都是周末才能用电脑看代码的.... 苦逼
    wudaown
        55
    wudaown  
    OP
       2015-06-28 20:21:49 +08:00
    @crab 结果好一点.. cookie和referer都抓取了重新用.. 30秒过后有多发送一个jsessionid不知道从哪里来的.. 图上面第一条是请求返回一个jsessionid然后在第二和第三条都重新用了.. 第四条就突然多了一个jsessionid .. 貌似是JS?
    RitzoneX
        56
    RitzoneX  
       2015-06-28 22:40:44 +08:00   1
    https://gist.github.com/RitzoneX/c8598c570b2c00b8eecb
    用python2,验证码我用了pytesseract处理
    spy8888
        57
    spy8888  
       2015-06-28 22:44:19 +08:00 via iPhone
    学习一下思路
    wudaown
        58
    wudaown  
    OP
       2015-06-29 03:28:23 +08:00 via iPhone
    @RitzoneX 感谢 我下周回去看看代码.. 你提到的验证码处理也是我想到的 .. 能问一下是不是有一份要分析js的吗?
    endoffight
        59
    endoffight  
       2015-06-29 07:46:47 +08:00 via Android
    @wudaown 不需要js,验证码对了就行
    endoffight
        60
    endoffight  
       2015-06-29 09:11:54 +08:00
    昨晚随便写了一下,以后重构

    https://gist.github.com/phpgao/3aa1338b9f4a27b73270
    binux
        61
    binux  
       2015-06-29 10:59:53 +08:00
    你并没有吧 cookiejar 保存下来,即你并没有在获取验证码的时候更新 cookie。

    如果你稍微看一下验证码是怎么实现的,你就会爬了。
    xxdd
        62
    xxdd  
       2015-07-01 14:24:43 +08:00
    @crab 这个yunfile不是会员它不是下载等待时间越来越长吗 爬虫是可以跳过等待时间吗 求教!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2405 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 01:21 PVG 09:21 LAX 18:21 JFK 21:21
    Do have faith in what you're doing.
    ubao 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