7
Posted on 下午10:38:00 by Fan Zhang and filed under

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

  这是因为 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)

  一些注释:

  1. urllib2 显然是比 urllib 高级一点的模块,里面包括了如何使用 Cookies。
  2. 在 urllib2 中,每个客户端可以用一个 opener 来抽象,每个 opener 又可以增加多个 handler 来增强其功能。
  3. 在构造 opener 时指定了 HTTPCookieProcessor 做为 handler,因此这个 handler 支持 Cookie。
  4. 使用 isntall_opener 后,调用 urlopen 时会使用这个 opener。
  5. 如果不需要保存 Cookie,cj 这个参数可以省略。
  6. user_data 存放的就是登录所需要的信息,在登录论坛的时候把这个信息传递过去就行了。
  7. 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">马上注册</a></td>
<td>密 码</td>
<td><input class="input" type="password" maxLength="20" name="pwpwd" size="40" tabindex="2" /> <a href="sendpwd.php" target="_blank">找回密码</a></td>
...
</form>

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

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

  有一篇文章供参考:解决在 Python 中登录网站的问题

2009-03-09Up:在 Python 3 下可以参考:Python 3.0 中的编码和字符串

1
Posted on 下午11:18:00 by Fan Zhang and filed under

  今天去看了"2008年中国国际信息通信展览会"(P&T/EXPO COMM CHINA 2008),在顺义那个新的国际展览中心。太远了,坐车都得一个多小时。听说附近有豪华别墅区,王菲就住在这穷乡僻壤里。

  比起以前参加的展会来说,人不算很多,我觉得还是太偏僻的缘故。虽然有所谓的摆渡车,但也就是那么几辆大巴。

  展会上没有见到什么出彩的东西,或许是因为拿出来展示的都是较为成熟的技术吧。

  不多说了,因为大部分看我 Blog 的人对通讯这口没啥兴趣。其实我也是...最后,放一张图,请放心,不是什么电子元器件...

OKWAP 展台(点击查看)

  btw,<div style="TEXT-ALIGN: center"> 不能在 Firefox 下令表格居中?在 IE 下倒是没有问题。

8
Posted on 下午4:40:00 by Fan Zhang and filed under

  本来不想写的,因为微软打击盗版已经不是一天两天了,这次使用的手段也不新鲜。关键的是,由此涌现出无数[文明用语],让我很震惊。

  首先是抵制的。这种人太无耻,用了盗版还理直气壮。有一个新闻是:中国网民向微软递交抗议信。微软打击的就是这帮人,本身就没给微软带来利益,难道还要讨好你不成?

  其次是上告的。比如:微软黑屏行动是有计划的大规模网络犯罪律师向公安部举报微软黑屏涉嫌黑客攻击犯罪。尤其是这个律师,简直没文化啊,有人还专门写文章从技术角度对其批驳,太给他面子了。

  还有让中国自己做操作系统的。他们说,中国要自强,自己做系统,把微软赶回老家。参见:金山抵制微软黑屏评论精选。暂且不说中国自己开发一个操作系统的可能性及其付出的代价。我就问这种人一句:中国真出了操作系统, 你会掏钱买吗?如果真的有人辛辛苦苦做出一个操作系统,不是国家买单,就是全都饿死。

  有人觉得,微软定价太贵,一个操作系统就要成百上千。我却觉得,从软件开发的角度来讲,如果真像某些人希望的那样,一个 Windows 只要50元,那微软还是别开发了,连员工的工资都不够,更别说赚钱了。我承认,2000元一套系统的价钱很多人承受不起,但是没有操作系统,2万元的机器也只能当摆设。

  有人不明白,为什么微软会提示:"您是盗版软件受害者",他们会觉得,我明明是盗版软件的受益者啊。说好听点,这种人是目光短浅,说难听点,就是偷了别人钱还在疑惑:明明能偷钱,干嘛还有人要辛辛苦苦工作。

0
Posted on 下午7:59:00 by Fan Zhang and filed under

  前几天在折腾那几块硬盘的时候,突发发现其中一块读写速度骤降,从原先的 80MB/s 降到了 8.5MB/s。使用磁盘检查、更换数据线、去掉其他硬盘都没有解决问题。

  后来发现原来是传输模式变成了PIO,在设备管理器,SCSI 和 RAID 控制器下面,改回 DMA 5 就恢复了。

  分析故障出现的原因,可能是有一次硬盘线没有插好,导致 Windows XP 为了保护硬盘而关闭 DMA 模式,只使用兼容模式。

2
Posted on 下午11:10:00 by Fan Zhang and filed under

  经人介绍,在凤凰网上看到了两则新闻,很有趣...

2008年09月28日:

  温家宝:在凤凰电视上看到曼德尔森喝中国牛奶很感动

2008年10月08日:

  英商务大臣曼德尔森上任当天 肾结石发作接受手术

3
Posted on 下午8:46:00 by Fan Zhang and filed under

  硬盘越来越便宜了...几年前我还使用刻录 CD 保存数据,但是现在感觉用 DVD 刻录也不如再买块硬盘方便。下图来自 it168。

  我的经验来看,刻录光盘首先受到容量限制,不能很好地组织数据;刻录花费大量的时间;刻完的盘还会自然损坏,根本不可能像所说的那样放上30年。

  这款希捷 ST31000340AS 1T 硬盘已经不到900元,我觉得比用光盘划算多了。

  不是专业评测,我也不怎么关心硬盘速度,实际使用中两块硬盘拷贝速度约为 35MB/s(其中一块是 IDE 希捷160G),还算满意。

  找些毛病:

  • 或许是电机声音大,很高频的噪音,我室友听不到,我倒是听的清楚。(这点也可能是我误会,但反正我装上它就能听见,拔下就听不到)
  • 做工没有几年前的那么细致了...但还是不错,反向封装设计,看不到元器件。