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 · 8461 次点击
    这是一个创建于 3427 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想用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   ·   实用小工具   ·   5843 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 02:54 · PVG 10:54 · LAX 18:54 · JFK 21:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.