V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SakuraSa
V2EX  ›  问与答

python 模拟登陆 Github

  •  1
     
  •   SakuraSa · 2014-09-23 20:45:41 +08:00 · 5449 次点击
    这是一个创建于 3719 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习python,想要用python爬一点Github上的数据
    可是第一步模拟登陆就失败了
    能请各位看看是什么问题么?

    https://gist.github.com/SakuraSa/36ddbfc4ffb331eb2eae

    环境:
    python==2.7
    BeautifulSoup==3.2.1
    requests==2.4.0

    25 条回复    2014-09-24 13:14:05 +08:00
    keithellis
        1
    keithellis  
       2014-09-23 20:51:38 +08:00
    csrf-token
    kslr
        2
    kslr  
       2014-09-23 20:56:08 +08:00
    @keithellis 和我上一个头像是一样的。
    SakuraSa
        3
    SakuraSa  
    OP
       2014-09-23 20:59:50 +08:00
    @keithellis
    请问是这样么?
    https://gist.github.com/SakuraSa/bbfd422c56b69991cf2c
    我这里似乎还是不行……
    keithellis
        4
    keithellis  
       2014-09-23 21:03:46 +08:00
    先访问 https://github.com/login
    取出 <input name="authenticity_token" type="hidden" value="mMDKe49Tbw7EEaPHkiQHdCngXvRt7QWKAOPn/AQrgmbYJBZqNETMq6thgWSXvusWvPje+zzrzpXR6pX7aq+uTA==" /> 中 authenticity_token 的值。
    SakuraSa
        5
    SakuraSa  
    OP
       2014-09-23 21:10:04 +08:00
    嗯,这个值在代码中已经取出了
    这是当前代码的 payload 的值:
    {'password': 'password', u'utf8': u'\u2713', 'login': 'username', u'commit': u'Sign in', u'authenticity_token': u'4+XkNAr6ZmwCakFtTT8I/+mSowYHW4OfFGYlOMnDMN05a1taSwKicHTQ4KdR5XDM0k0WwHLEcx/B+IEtQyZUpQ=='}
    keithellis
        6
    keithellis  
       2014-09-23 21:12:26 +08:00
    u'utf8': u'\u2713' 可以不要
    SakuraSa
        7
    SakuraSa  
    OP
       2014-09-23 21:14:05 +08:00
    @keithellis
    结果还是不行的样子,不论加不加 u'utf8': u'\u2713'
    oott123
        8
    oott123  
       2014-09-23 21:20:02 +08:00
    诶,GitHub 有 API 的呀,没必要自己模拟嘛,多麻烦。
    https://developer.github.com/v3/
    SakuraSa
        9
    SakuraSa  
    OP
       2014-09-23 21:23:05 +08:00
    @oott123
    还有这么方便的API,之前都不知道呢~

    不过,我的目的主要是要熟悉一下怎么用python爬数据
    所以,还是希望问题能够得到解答
    keithellis
        10
    keithellis  
       2014-09-23 21:23:29 +08:00
    @SakuraSa POST 到 https://github.com/session 这个 URL。
    SakuraSa
        11
    SakuraSa  
    OP
       2014-09-23 21:25:06 +08:00
    @keithellis
    rsp = session.post('https://github.com/session', data=payload, headers=headers)
    的确是post到这个地址的……
    keithellis
        12
    keithellis  
       2014-09-23 21:30:18 +08:00
    SakuraSa
        13
    SakuraSa  
    OP
       2014-09-23 21:35:21 +08:00
    我也得到了200的代码
    但是并没有得到cookie
    正确的cookie应该有:
    logged_in=yes
    user_session=xxxxxxxx
    但是我的返回结果中没有(而且从内容看,似乎返回了首页的内容
    SakuraSa
        14
    SakuraSa  
    OP
       2014-09-23 21:36:21 +08:00
    @keithellis
    摸不到头绪,哪里错了呢 (✖﹏✖)↷
    keithellis
        15
    keithellis  
       2014-09-23 22:01:34 +08:00
    keithellis
        16
    keithellis  
       2014-09-23 22:07:46 +08:00
    SakuraSa
        17
    SakuraSa  
    OP
       2014-09-23 22:16:03 +08:00
    @keithellis
    是的呢,我也得到了同样的页面,状态200
    但是似乎没有得到cookie
    我把您例子的代码最后稍作修改:
    https://gist.github.com/SakuraSa/3f1095cb0e98e6a0c59c
    结果是这样的:
    <Cookie logged_in=no for .github.com/>
    <Cookie _gh_sess=eyJsYXN0X3dyaXRlIjoxNDExNDgxNjIxNzUxLCJzZXNzaW9uX2lkIjoiZWZiYWMzYzcyNjdkMTg5NDMwY2IxYTEwZTQ5MWM3NTIiLCJfY3NyZl90b2tlbiI6IjBNV0JEbkIxZWhuaUsrb3NmVndFTGk2MGpMTmFtbVRjUWVnYXptYlVZbUk9In0%3D--cf3681efff227b7b20789487548f5609b492f320 for github.com/>
    --------------------
    logged_in: no
    [Finished in 5.1s]

    似乎是没有登陆成功呢(顺请教一下,如何贴gist的代码呢?
    keithellis
        18
    keithellis  
       2014-09-23 22:34:19 +08:00
    @SakuraSa 不好意思,多问一句,有替换 USER = 'USER' 和 PASSWORD = 'PASSWORD'为自己的用户名和密码吗。
    keithellis
        19
    keithellis  
       2014-09-23 22:35:49 +08:00
    @SakuraSa 我就忘记替换了!
    SakuraSa
        20
    SakuraSa  
    OP
       2014-09-23 22:46:49 +08:00
    @keithellis
    的确很容易忘记呢,一开始我也忘记过(还差点把自己的账户贴出去了……
    但是,现在这几次我没忘记呢
    <a href="http://imgur.com/97TmB6o"><img src="?2" title="Hosted by imgur.com" /></a>
    keithellis
        21
    keithellis  
       2014-09-23 22:52:51 +08:00   ❤️ 1
    @SakuraSa ![Imgur]() 我无能为力了。
    Esay
        22
    Esay  
       2014-09-23 23:00:25 +08:00
    如果登陆的过程有很多 Javascript 代码,推荐 phantomjs
    sandtears
        23
    sandtears  
       2014-09-24 10:04:50 +08:00
    貌似 Github 是有官方 API 的。。。
    dingyaguang117
        24
    dingyaguang117  
       2014-09-24 10:51:49 +08:00
    @SakuraSa 表示 @keithellis 的脚本可以登录啊,logged_in 是yes

    严重怀疑LZ你的用户名密码是不是正确的?
    SakuraSa
        25
    SakuraSa  
    OP
       2014-09-24 13:14:05 +08:00
    @keithellis
    谢谢帮助
    我发现似乎并不是登陆代码的问题,情况有点奇怪
    同样的代码我在宿舍可以正常登陆,但在实验室的网络就不行(之前都是在实验室测试的
    在隔壁的服务器上也可以登录(偷偷借用了一下……
    ?1

    您知道,像我这样的情况可能是什么问题么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1249 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:13 · PVG 07:13 · LAX 15:13 · JFK 18:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.