当前位置: 首页 > 面试题库 >

使用urllib2登录网站-Python 2.7

陆烨磊
2023-03-14
问题内容

好的,所以我将它用于reddit机器人,但我希望能够弄清楚如何登录到任何网站。如果那有道理…

我意识到不同的网站使用不同的登录表单等。那么我如何找出如何针对每个网站进行优化呢?我假设我需要在html文件中查找某些内容,但不知道是什么。

我不想使用Mechanize或任何其他库(这是这里所有其他答案的内容,实际上并没有帮助我了解正在发生的事情),因为我想自己学习所有功能的工作原理。

urllib2文档确实对我没有帮助。

谢谢。


问题答案:

首先,我会说我一段时间没有以这种方式登录,因此我可能会错过一些更“被接受”的方式来进行登录。

我不确定这是否是您要追求的,但是如果没有像这样的库mechanize或更强大的框架selenium,那么在基本情况下,您只需查看表单本身并查找即可inputs。例如,查看www.reddit.com,然后查看渲染页面的源,您将找到此表单:

<form method="post" action="https://ssl.reddit.com/post/login" id="login_login-main"
  class="login-form login-form-side">
    <input type="hidden" name="op" value="login-main" />
    <input name="user" placeholder="username" type="text" maxlength="20" tabindex="1" />
    <input name="passwd" placeholder="password" type="password" tabindex="1" />

    <div class="status"></div>

    <div id="remember-me">
      <input type="checkbox" name="rem" id="rem-login-main" tabindex="1" />
      <label for="rem-login-main">remember me</label>
      <a class="recover-password" href="/password">reset password</a>
    </div>

    <div class="submit">
      <button class="btn" type="submit" tabindex="1">login</button>
    </div>

    <div class="clear"></div>
</form>

在这里,我们看到了几个input的- ,,和。另外,请注意参数-
即表单将发布到的URL,因此将成为我们的目标。因此,现在的最后一步是将参数打包到有效负载中,并将其作为请求发送到URL。同样在下面,我们创建了一个new
,添加了处理cookie和添加标头的功能,从而为我们提供了一个更强大的打开器来执行请求):op``user``passwd``rem``action``POST``action``opener

import cookielib
import urllib
import urllib2


# Store the cookies and create an opener that will hold them
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

# Add our headers
opener.addheaders = [('User-agent', 'RedditTesting')]

# Install our opener (note that this changes the global opener to the one
# we just made, but you can also just call opener.open() if you want)
urllib2.install_opener(opener)

# The action/ target from the form
authentication_url = 'https://ssl.reddit.com/post/login'

# Input parameters we are going to send
payload = {
  'op': 'login-main',
  'user': '<username>',
  'passwd': '<password>'
  }

# Use urllib to encode the payload
data = urllib.urlencode(payload)

# Build our Request object (supplying 'data' makes it a POST)
req = urllib2.Request(authentication_url, data)

# Make the request and read the response
resp = urllib2.urlopen(req)
contents = resp.read()

请注意,这会变得更加复杂-
例如,您也可以使用GMail进行此操作,但是您需要提取每次都会更改的GALX参数(例如参数)。同样,不确定这是否是您想要的,但希望能有所帮助。



 类似资料:
  • 问题内容: 在此网站上,您可以输入您的学生卡号,然后显示该卡上还剩多少钱。我想使用JSOUP获得信息。这是我当前的代码,但是不起作用, 我没有太多经验,所以我不知道在哪里寻找问题。一些想法: 我应该使用还是? 在使用chrome devoloper工具时,发布数据是我使用功能发送的所有数据。但是,如果发送时出现错误,为什么? 我应该发送解密或加密的数据吗?(两者均在chrome devoloper

  • 问题内容: 我正在尝试使用Python登录到此页面。 我尝试使用另一篇文章中描述的步骤,并获得了以下代码: 但这给了我以下输出: 我究竟做错了什么? 问题答案: 我建议使用精彩的模块。 下面的代码将使您登录到该站点,并在会话期间将cookie保留下来。

  • 问题内容: 我想用Java登录到一个网站。我使用的是org.apache.http,我已经写了 尽管我仍然无法登录,但它正确发送了我测试过的帖子表格。我要登录的网站是http://www.xtratime.org/forum/ 关于此的任何想法或是否有其他方法? 问题答案: 在提交页面之前,请对密码进行编码()。您应该在代码中执行相同的操作。 该属性的值与您的代码()不匹配。您应该将发布请求发送到

  • 问题内容: 我正在尝试从此站点http://cheese.formice.com/maps/@5865339获取信息,但是当我请求使用urllib.urlopen时,它说我需要登录,我正在使用此代码: 我做错了什么? 问题答案: 它不是直接使用,但是您可能会发现使用该包更容易。有一个对象看到这个答案 这将使您登录到该站点。您可以通过以下方式进行验证: 登录后,您可以调用所需的特定网址。

  • 我正试着从下面的网站刮取一些信息。我是新来的,所以不完全了解正在发生的事情。我基本上是从我在互联网上找到的各种例子中获取信息,我正在使用selenium和python来帮助我导航到页面,从那里我可以刮取一些信息,我使用了下面的脚本,我可以导航到主页,关闭cookies并点击登录。此时,将弹出一个用于输入用户id和密码的弹出窗口div元素未被识别,每次我得到的错误是不存在这样的元素时,我添加了具有预

  • 我试图登录使用领英J汤,我已经尝试了几种方法,但总是遇到错误403,我哪里出错了? 测试一 错误控制台 组织。jsoup。HttpStatusException:获取URL时发生HTTP错误。状态=403,URL=https://www.linkedin.com在org。jsoup。帮手HttpConnection$响应。在org上执行(HttpConnection.java:590)。jsoup