Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用脚本登录网站的难度级别_Python_Http_Login - Fatal编程技术网

Python:使用脚本登录网站的难度级别

Python:使用脚本登录网站的难度级别,python,http,login,Python,Http,Login,我目前正在从事一个个人python项目,在此项目中,我需要能够登录到一组网站(我有帐户),然后在我的帐户页面上阅读源代码。在我的帐户页面上抓取并阅读源代码没有问题。我遇到的问题是使用python脚本登录网站 我已经查看了这个站点上的大约六个线程,它们专门涉及这个主题,并尝试了代码和建议。我试验过的库包括urlib2、requests和mechanize。到目前为止,这些措施都没有奏效。大多数时候,我使用的脚本将从网站的登录页面而不是我的帐户页面(如预期)获取源代码。在这个线程的底部是我使用过的两

我目前正在从事一个个人python项目,在此项目中,我需要能够登录到一组网站(我有帐户),然后在我的帐户页面上阅读源代码。在我的帐户页面上抓取并阅读源代码没有问题。我遇到的问题是使用python脚本登录网站

我已经查看了这个站点上的大约六个线程,它们专门涉及这个主题,并尝试了代码和建议。我试验过的库包括urlib2、requests和mechanize。到目前为止,这些措施都没有奏效。大多数时候,我使用的脚本将从网站的登录页面而不是我的帐户页面(如预期)获取源代码。在这个线程的底部是我使用过的两个代码示例

我想知道的是:

  • 使用python脚本登录网站有多困难?显然,python中有一些库可以处理这个问题,但这项任务是否需要高级编程技能

  • 我是否需要根据每个网站允许用户登录的方式更改每个网站的程序?是否有一些网站无法使用脚本登录

  • 还有其他更适合此任务的语言吗

  • 我不是要求有人给我提供代码(尽管可以这样做),因为我非常乐意自己尝试解决这个问题。然而,我的编程技能仍然是补救性的,如果这项任务远远高于初级程序员的工资等级,那么我至少希望事先知道这一点

    例1:

        import requests
    
        r = requests.get('https://www.websample.com', auth=('myusername', 'mypassword'))
    
        print r.content
    
        print r.status_code
        print r.headers['content-type']
    
    例2:

        s = requests.session()
        login_data = dict(email='myusername', password='mypassword')
        s.post('http://www.websample.com', data=login_data)
        r = s.get('http://www.websample/page_with_info.com')
    
        print r.content
    
    例3:

        import urllib2
    
        password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    
        top_level_url = "http://www.websample.com"
        password_mgr.add_password(None, top_level_url, 'myusername', 'mypassword')
    
        handler = urllib2.HTTPBasicAuthHandler(password_mgr)
    
        opener = urllib2.build_opener(handler)
    
        data = opener.open('http://www.websample/page_with_info.com')
    
        urllib2.install_opener(opener)
    
        x = data.read()
        print x
    

    假设这些网站没有实现某种形式的两步认证,即使用发送到不同于pc的设备的一次性密钥,那么这是完全可行的。我总是使用urllib2来完成类似的任务,最初是从这个问题开始的,也从第一个链接到的写的。非常有用的例子,如果你是新手

    关于你的问题的答案:

  • 只要你知道怎么做,没有什么是困难的。我强烈推荐阅读上面的前两个链接

  • 是的,您需要更改每个网站的程序。网站由不同的人创建,他们(通常)使用不同的身份验证机制。您需要的是一个应用程序,例如或,它允许您在“手动”登录时查看浏览发送和接收的内容。这样,就可以用(python)脚本复制该行为

    我不相信有太多的网站是不可能做到这一点的编程。理论上,即使是那些需要通过手机短信进行两步身份验证的系统,也可以通过允许脚本以某种方式访问手机的方式,以纯粹的编程方式登录。这确实使任务更加复杂。然而,带有CAPTCHA的网站完全是另一回事,因为这些网站是专门为防止此类自动登录而设计的

  • 这完全取决于你的经验。可以用很多语言来做,我甚至用bash来做。但在某些情况下,它更优雅,比如Python

  • 给大家举一个例子,说明我不久前在自动填写第一页之后要求确认的表单时所做的工作,就是安装LiveHTTPHeaders。然后,我存储了浏览器和web服务器之间的通信会话日志,并注意到一些cookie也被设置。一旦我将它们添加到基于urllib2的脚本中,我就更进一步了。在检查了更多的日志之后,您最终将自动登录。只要确保继续发送所有cookies,以尽可能最好的方式模拟您的浏览器