urllib2 重定向之后登陆,下载文件的思路 - 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
cheerzeng
V2EX    Python

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

  •  
  •   cheerzeng 2015-09-10 13:04:06 +08:00 3666 次点击
    这是一个创建于 3689 天前的主题,其中的信息可能已经有所发展或是发生改变。
    嗨,
    最近有个活,写个脚本下载文件,然后这个链接用浏览器打开之后是会重定向到一个登陆页面的。
    我现在的思路是先直接请求这个文档的链接,然后把返回的 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     Solana     5710 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 176ms UTC 06:24 PVG 14:24 LAX 23:24 JFK 02:24
    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