Python 登录网站详解及实例

作者:lqh 时间:2022-05-31 00:47:57 

Python 登录网站详解及实例

对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看。

这是因为 HTTP 协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登录了呢?有两种方式:

  1. 在URI 中显式地使用 Session ID;

  2. 利用 Cookie,大概过程是登录一个网站后会在本地保留一个 Cookie,当继续浏览这个网站的时候,浏览器会把 Cookie 连同地址请求一起发送过去。

Python 提供了相当丰富的模块,所以对于这种网络操作只要几句话就可以完成。我以登录 QZZN 论坛为例,事实上下面的程序几乎所有的 PHPWind 类型的论坛都是适用的。


# -*- coding: GB2312 -*-

from urllib import urlencode
import cookielib, urllib2

# cookie
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)

# Login
user_data = {'pwuser': '你的用户名',
      'pwpwd': '你的密码',
      'step':'2'
     }
url_data = urlencode(user_data)
login_r = opener.open("http://bbs.qzzn.com/login.php", url_data)

一些注释:

  • urllib2 显然是比 urllib 高级一点的模块,里面包括了如何使用 Cookies。

  • 在 urllib2 中,每个客户端可以用一个 opener 来抽象,每个 opener 又可以增加多个 handler 来增强其功能。

  • 在构造 opener 时指定了 HTTPCookieProcessor 做为 handler,因此这个 handler 支持 Cookie。

  • 使用 isntall_opener 后,调用 urlopen 时会使用这个 opener。

  • 如果不需要保存 Cookie,cj 这个参数可以省略。

  • user_data 存放的就是登录所需要的信息,在登录论坛的时候把这个信息传递过去就行了。

  • urlencode 功能是把字典 user_data 编码成"?pwuser=username&pwpwd=password"的形式,这样做是为了使程序易读一些。

最后一个问题是,pwuser、pwpwd 这类的名字是从哪儿来的,这就要分析需要登录的网页了。我们知道,一般的登录界面都是一个表单,节选如下:


<form action="login.php?" method="post" name="login" onSubmit="this.submit.disabled = true;">
<input type="hidden" value="" name="forward" />
<input type="hidden" value="http://bbs.qzzn.com/index.php" name="jumpurl" />
<input type="hidden" value="2" name="step" />
...
<td width="20%" onclick="document.login.pwuser.focus();"><input type="radio" name="lgt" value="0" checked />用户名 <input type="radio" name="lgt" value="1" />UID</td>
<td><input class="input" type="text" maxLength="20" name="pwuser" size="40" tabindex="1" /> <a href="reg1ster.php" rel="external nofollow" >马上注册</a></td>
<td>密码</td>
<td><input class="input" type="password" maxLength="20" name="pwpwd" size="40" tabindex="2" /> <a href="sendpwd.php" rel="external nofollow" target="_blank">找回密码</a></td>
...
</form>

从这里可以看出,我们需要输入的用户名密码对应的就是 pwuser 和 pwpwd,而 step 对应的则是登录(这个是尝试出来的)。

注意到,这个论坛表单采用的是 post 方式,如果是 get 方式则本文的方法就需要变动一下,不能直接 open,而是应该首先 Request,然后再 open。更详细的请看手册...

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://www.cnblogs.com/huangcong/archive/2011/08/30/2160083.html

标签:Python,登录网站
0
投稿

猜你喜欢

  • Windows2003 IIS+PHP+MySQL配置

    2007-06-15 15:15:00
  • 渗透和改变 非洲web 2.0网站Logo

    2008-01-22 13:31:00
  • 详解python变量与数据类型

    2021-09-24 14:38:32
  • T-SQL 查询语句的执行顺序解析

    2011-11-03 17:04:06
  • 关于php开启错误提示的总结

    2023-11-04 10:46:21
  • 通过python改变图片特定区域的颜色详解

    2021-09-17 11:01:22
  • Python量化交易实战之使用Resample函数转换“日K”数据

    2023-07-30 07:31:11
  • python从sqlite读取并显示数据的方法

    2022-08-27 22:46:24
  • PHP5 mysqli的prepare准备语句使用说明

    2023-11-22 12:50:29
  • Swoole webSocket消息服务系统代码设计详解

    2023-06-09 01:05:28
  • bpython 功能强大的Python shell

    2022-05-08 22:12:06
  • Python技巧之四种多线程应用分享

    2021-12-04 12:11:57
  • asp如何在网上查找链接?

    2010-06-22 21:10:00
  • 解析PHP中一些可能会被忽略的问题

    2023-09-05 14:07:37
  • 有关简洁网页设计需知的6点技巧

    2012-04-25 20:55:01
  • python matplotlib 画dataframe的时间序列图实例

    2023-05-17 00:12:34
  • Window.Open详解

    2008-06-08 13:43:00
  • 如何随机显示图片计数器?

    2010-05-16 15:21:00
  • Python实现将n个点均匀地分布在球面上的方法

    2021-02-21 20:56:33
  • Python3 filecmp模块测试比较文件原理解析

    2021-10-28 15:24:19
  • asp之家 网络编程 m.aspxhome.com