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
cheerzeng
V2EX  ›  Python

urllib2 重定向之后登陆,下载文件的思路

  •  
  •   cheerzeng · 2015-09-10 13:04:06 +08:00 · 3348 次点击
    这是一个创建于 3371 天前的主题,其中的信息可能已经有所发展或是发生改变。
    嗨,
    最近有个活,写个脚本下载文件,然后这个链接用浏览器打开之后是会重定向到一个登陆页面的。
    我现在的思路是先直接请求这个文档的链接,然后把返回的 cookie 存起来,接着再请求这个登录的页面,把表单的信息 post 过去,同时带上之前的 cookie.
    不知道这个思路对不对,因为一直都没取到文档,只是得到了登录的页面。
    18 条回复    2015-09-14 10:10:11 +08:00
    qq12365411
        1
    qq12365411  
       2015-09-10 16:14:09 +08:00
    推荐用 requests 这个包 urllib2 不太会

    至于你的思路

    你可以用 Selenium

    Selenium 可以让你用脚本,控制他打开浏览器,输入密码,登陆,然后点击按钮 ,下载
    xavierskip
        2
    xavierskip  
       2015-09-10 16:22:57 +08:00
    requests 库会自动帮你解决掉 302 重定向的问题。还有登陆 session 的问题。
    hahastudio
        3
    hahastudio  
       2015-09-10 16:34:03 +08:00
    可选(0. 访问下载文件的 URL )
    1. 到登录页面, 登录,拿 cookie
    2. 带着 cookie 访问下载文件的 URL
    这样?
    endoffight
        4
    endoffight  
       2015-09-10 16:50:09 +08:00
    小伙子我看你骨骼惊奇,天庭饱满,并非凡人乃是百年不遇的奇才,我这儿有一份下载脚本,给你看看

    http://www.phpgao.com/yum-file-downloader.html
    shidenggui
        5
    shidenggui  
       2015-09-10 16:52:25 +08:00
    曾经的我也是使用 urllib2 ,直到我发现了 requests ,如果是批量的话推荐 scrapy
    bdbai
        6
    bdbai  
       2015-09-10 20:25:22 +08:00 via iPhone
    @qq12365411 控制浏览器这个思路明显没有直接发请求来的好 浏览器出点什么只有人清楚
    cheerzeng
        7
    cheerzeng  
    OP
       2015-09-11 11:16:18 +08:00
    @qq12365411 三种都试过, requests 好像跟 urllib2 差不多,可能 API 更加好用。
    Selenium 的话遇到一个问题就是 IE 打开,会有弹出提示是否下载的窗口,这个貌似 selenium 解决不了,你有 idea 吗?
    cheerzeng
        8
    cheerzeng  
    OP
       2015-09-11 11:17:31 +08:00
    @xavierskip urllib2 页是能解决重定向的问题,昨天的紧张是,发现 post 是到了一个 https 的服务器上面去了,有个.fcc 的函数管理这个 post.现在没什么头绪去处理这个
    cheerzeng
        9
    cheerzeng  
    OP
       2015-09-11 11:17:49 +08:00
    @endoffight 谢谢,我试试
    cheerzeng
        10
    cheerzeng  
    OP
       2015-09-11 11:18:36 +08:00
    @shidenggui 不需要批量,就是单次可以了,想把这个登录的问题处理之后再考虑 scrapy
    qq12365411
        11
    qq12365411  
       2015-09-11 11:24:31 +08:00
    @cheerzeng Selenium 可以 控制 chrome 火狐, 并且这 2 个浏览器 提供专门的 driver 建议弄 chrome ,具体请谷歌, 不要用 ie
    cheerzeng
        12
    cheerzeng  
    OP
       2015-09-11 11:43:05 +08:00
    @qq12365411 我一开始用 selenium ,然后有什么 profile 问题, ff 一直没打开我的 url,问了一个做自动化的前辈,说建议用 IE , profile 没那么复杂。
    chrome 没试过,我看能不能试试,
    问一下, selenium 有下载文件的 API 吗,如果只是点击下载按钮的话,怎么确保文件已经完整下载了?
    qq12365411
        13
    qq12365411  
       2015-09-11 12:29:28 +08:00
    @cheerzeng 抱歉 我没有用过文件下载 你可以 搜索 selenium download file
    cheerzeng
        14
    cheerzeng  
    OP
       2015-09-11 16:28:04 +08:00
    @qq12365411 chrome default profile 加载有问题,不过先不管他了,准备查一下下载文件看看有没有工具可以检查。目前这是最简单的方法了
    firebroo
        15
    firebroo  
       2015-09-12 18:42:22 +08:00
    3 楼的做法可行啊。
    cheerzeng
        16
    cheerzeng  
    OP
       2015-09-13 14:05:41 +08:00
    @hahastudio @firebroo 我也是这个思路。但是最近发现里面的登录页面, post 处理是一个 https 地址,目前不知道是哪个地址,所以之前一直往原来的地址发 post 应该是错的,导致拿不到 cookie
    firebroo
        17
    firebroo  
       2015-09-13 16:29:31 +08:00
    @cheerzeng 可以用 burpsuite 抓包,把登陆验证的包抓下来。
    cheerzeng
        18
    cheerzeng  
    OP
       2015-09-14 10:10:11 +08:00
    @firebroo 谢谢,我还没用过这个工具,我试试。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3196 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:50 · PVG 20:50 · LAX 04:50 · JFK 07:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.