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
投稿

猜你喜欢

  • python数字图像处理skimage读取显示与保存图片

    2023-07-28 17:33:00
  • 详解Python3定时器任务代码

    2023-10-15 14:50:26
  • XMLHTTP自动判断远程网页字符编码

    2007-12-28 13:41:00
  • php相当简单的分页类

    2023-11-17 01:50:36
  • Python中正则表达式的用法实例汇总

    2021-10-02 07:48:08
  • python3.6+opencv3.4实现鼠标交互查看图片像素

    2021-09-09 05:27:12
  • Python中函数参数调用方式分析

    2022-09-14 04:54:07
  • MYSQL之插入极限分析

    2024-01-22 13:35:44
  • ASP获取网页内容(解决乱码问题)

    2009-07-26 10:44:00
  • Python实现计算AUC的三种方式总结

    2021-07-10 23:35:32
  • HTML中小meta的大作用

    2008-04-25 22:40:00
  • 利用golang的字符串解决leetcode翻转字符串里的单词

    2023-07-17 16:36:21
  • python TCP Socket的粘包和分包的处理详解

    2021-06-14 16:49:50
  • Vue.js 加入高德地图的实现代码

    2024-05-28 15:51:31
  • 微信小程序实现简单购物车小功能

    2024-04-16 10:37:12
  • 使用python和pygame绘制繁花曲线的方法

    2021-05-05 04:47:11
  • Python输出汉字字库及将文字转换为图片的方法

    2023-01-13 07:06:39
  • python的继承详解

    2022-12-09 14:53:10
  • Python正则表达式教程之二:捕获篇

    2023-08-24 00:27:39
  • 100 个 Python 小例子(练习题四)

    2022-02-15 16:20:05
  • asp之家 网络编程 m.aspxhome.com