Yearly Archives: 2012

AHK实现批量网页数据提取

Author: Zhuotong Nan ([email protected])

AHK是很好用的在windows下实现自动化的脚本语言,对于有一定编程基础的童鞋,很快就可以上手写代码。ahk的官方网址是http://www.autohotkey.com/,其forum里有大量的他人写好的脚本。

本文实现一个从网页里自动提取数据的一个例子。

目的

从40407.com网站里自动批量得到《武林3》70区豪侠礼包代码。原始网站界面如下,

1. 进入http://fahao.40407.com/11417.html,点击“淘号”按钮,如果未登陆,则提示登录。登录后弹出淘号界面如下图,

从界面中获取以XX打头的15位代码。

2. 关闭“查看卡号”,然后重复步骤1,可以得到一系列的代码。

现在的目的是实现其自动化,并把得到的代码保存到一个文本文件(gifts.txt)里。

实现

1. 点击“我要淘号”时,本地与远程有一个通讯。利用chrome自带的inspect element的network功能(也可以用任何网络分析工具),在“我要淘号”上右键选 inspect element, 到Network tab上,这时点一下“我要淘号”执行一次通讯,Network将捕捉到通讯信息。

我们可以看到通讯的header。我们需要做的是模拟chrome的通讯用ahk来实现。

2. ahk有几个有用的他人写的http通讯脚本,一个叫httpquery,一个叫httprequest,都很优秀,但前者2010年后已经不再继续支持,并且不支持cookies文件头。而cookie信息是我们这个任务里的关键,否则“我要淘号”返回是要求登陆的信息。httprequest可以从这个网址下载:http://www.autohotkey.com/community/viewtopic.php?t=73040

3. 代码实现。本代码实现了自动获取500个号码。

; Author: Zhuotong Nan ([email protected])
; Date: 8/8/2012

loop, 500
{
url := “http://fahao.40407.com/app/common.php”
data := “a=taohao&id=11417”

header :=”Cookie: PHPSESSID=da317c26545caafa204520e4c89276c9; DedeUserID=427080; DedeUserID__ckMd5=d770e5fdd4d5a237; DedeLoginTime=1344523159; DedeLoginTime__ckMd5=2233e446322305d5; Hm_lvt_75e3d45d3ad80ecb1af209e743d1b514=1344521115290,1344521187845,1344523168489; Hm_lpvt_75e3d45d3ad80ecb1af209e743d1b514=1344523168489`nReferer: http://fahao.40407.com/11417.html`nConnection: keep-alive”
options :=””

bytes := httprequest(url, data, header, options)

sleep 500

;parse gift code
pos:=Regexmatch(data,”XXw{13}”)

if pos!=0
{
code := substr(data,pos,15)
fileappend,%code%`n,gifts.txt
}

sleep 1000

fileappend,%data%`n,test.html
}

#include httprequest.ahk

ESC::
exitapp

4. 注意httprequest有4个参数,参数1是访问的地址,参数2是上传的数据(post data)和下载过来的内容(放同一个参数里),参数3是上传的http头,响应的http头也在参数3里,参数4是选项。我们需要使用的是前3个参数。注意参数3 header的构造,不同的key-value对使用分行符(`n)来分隔。而且这里必须要增加cookie信息,这个信息可以从chrome里分析得到。传回来的数据存放在参数2,data里。

5. 使用了正则表达式,从下载过来的data 里进行pattern分析。礼包代码是以XX开头的15长度的大小写字母和数字组成。表达式为XXw{13}。

6. #include httprequest.ahk 把httprequest脚本包括进来,所以前文可以调用httprequest函数。

7. 获取的代码存放在 gifts.txt里。

8. 使用本代码前,必须事先用chrome (或者IE等别的浏览器,需要对应获取其cookie)登录成功。按esc键随时退出。

结论

本文演示了使用AHK从网页自动批量获取指定数据。使用了httprequest方法,其中关键是必须维持cookie信息。

Google连接不上

发现google连接不上了,在chrome里打开提示

image

Oops,估计又是伟大的防火墙在起作用了。最近又发生什么大事了吗?

只能转到百度,才发现百度对于查国外资料基本毫无帮助,即使是中文资料,返回来往往也不是想要的。

叹气,算了,先坚持一下,再不行继续买国外的vpn翻墙吧。

GFW最好能区别对待不同的网络,比如对于科技网能放松一些,离开Google,对于科研人员来讲十分的不方便。

2个冻土论文

[1] Huang P, Nan Z, Zhao L.Permafrost distribution simulation over the Qinghai-Tibet plateau with the extended surface frost number model[C]//Research Monograph of Cold and Arid Regions Engineering and Environment: A Collection of the Papers Dedicated to the 70th Birthday of Academician CHENG Guodong.Lanzhou:Lanzhou University Press,2012:240—252.[黄培培,南卓铜,赵林.利用扩展的地面冻结数模型模拟青藏高原冻土分布[C]//寒旱区工程与环境研究——程国栋院士七十华诞学术研讨会文集.兰州:兰州大学出版社,2012:240—252.]
[2] Li X, Ran Y, Nan Z, et al.A Frozen Ground Distribution Map of China by Integrating Existing Permafrost Maps and Modeling Results[C]//Research Monograph of Cold and Arid Regions Engineering and Environment: A Collection of the Papers Dedicated to the 70th Birthday of Academician CHENG Guodong.Lanzhou:Lanzhou University Press,2012:229—239.[李新,冉有华,南卓铜,等.一个融合了我国现有冻土图和模型模拟结果的中国冻土分布图[C]//寒旱区工程与环境研究——程国栋院士七十华诞学术研讨会文集.兰州:兰州大学出版社,2012:229—239.]

frostnum_qtp (pdf)

lixin_perm.pdf (pdf)

通过AHK设置延迟启动

我的笔记本电脑8个G的内存,大可把再多的程序都一并装载到内存使用。但随着程序安装的越来越多,启动越来越慢,原因是启动项里被安装了大量的程序,比如在启动时要执行声卡的一些控制程序,蓝牙,输入法,thinkpad本身的一些不知道干啥的程序,这些启动时就消耗了大量的时间。下图是我机器上的启动项。估计多数人的机器里启动项只会比这个多,而不是少。

ScreenClip(3)

想着能不能把一些不必要的内容延迟启动。网上当然有一些现成的工具是做延迟启动的,但这么简单的事情,有必要搞的这么复杂吗,我们用autohotkey自己弄一个得了。

首先建一目录,比如在C:WORKSPACESTARTUP目录下,把延迟启动的内容的快捷方式(注意是快捷方式,不是程序本身)放在这里,如下图。

ScreenClip(7)

然后把对应的启动项给禁止掉。我用的是 You Uninstaller!的starter manager来关掉启动项的。比如下图,我把 Evernote Clipper, 三星同步软件Kies等给关掉,其中 Evernote Clipper延迟启动,做了个快捷方式放到刚才建好的C:WORKSPACESTARTUP目录下。

在C:WORKSPACESTARTUP目录下新建一个autohotkey脚本,取名autorun.ahk,用记事本打开,在里面放如下内容:

folder = C:WORKSPACESTARTUP
Loop, %folder%*.lnk

;遍历全部的快捷方式, 非快捷方式不启动
{
run %folder%%A_LoopFileName%
; run 命令,等一个程序启动后再循环启动下一个程序,直到循环自动退出。
}
ExitApp
; 自动退出

然后把autorun的快捷方式放到开始菜单里的启动项(startup)里。

  • 注意有些项如我机器上的bluetooth,可能无法通过此方法启动,这样就只能保留在原本的启动位置了。
  • 快捷名中间不能有空格吧。
  • 如果要自定义启动次序,可以使用在快捷名前加1, 2, 3,或者a, b, c 来实现。

开机试试效果。


1. AHK 快餐店 – 开机自动运行程序的延迟启动[绿色版], http://www.appinn.com/ahk-23-run-later/

2. autohotkey, http://www.autohotkey.com

再遇论文篇幅限制

一个学生写了个论文,投到《水土保持研究》,几天后接到回复,说论文太长了。其实文字包括图,5号字1倍行距才13页,一般排版下来也就8,9页左右。象冰川冻土等期刊都是接受这个篇幅的。post-grant-filings

从该期刊的网站(水保所网站)上只有一个简介,也找不到关于长度的要求。隐约记得10年前,我当学生的时候,那时候多数不能电子邮件投稿,篇幅限制在当时是一个普遍要求。但慢慢的各家杂志都支持电子邮件投稿,现在多数都有自己的杂志网站,支持在线投稿,篇幅限制一般不作专门要求。这种变化是可喜的。当国外杂志主要考察文章内容,发表的论文鲜有10页以下的,国内如果还在要求篇幅不超过5,6页,首先就没有跟国际接轨。这年头连油价都跟国际紧密接轨上了。事实上,大凡地学科研论文,5,6页的篇幅是很不够的,很难把一个事情讲清楚,语焉不详,直接降低了文章的价值。

所以,改投他刊吧。

兰州这烂路到处是大窟窿

解放门立交路出来上白银路不远处,未到交通实业大厦。大马路上直接一个大窟窿,一不留神直接就栽进里去了。是不是可以跟兰州路政打官司,要求赔偿损失呀。照片拍摄时间,2012/06/30 9:49:22。

PPG00062.MOV_snapshot_02.43_[2012.07.03_16.27.47]

三星手机bluetooth问题

与三星 GT-I9103进行蓝牙连接时, 为了使用手机支持的全部蓝牙功能,好像必须先安装手机与笔记本电脑同步的skies, 通过安装skies把必要的驱动程序安装上. 然后进行蓝牙连接时,才能找到全部的bluetooth services 蓝牙的驱动更新后,电脑需要重启,如果已经配对(pairing),需要把配对取消掉,然后重新配对,在手机和电脑双方都要重新配对。

outlook 2010升级后Blackberry Desktop Software找不到outlook同步项的解决

环境,win 7 x64, ultimate 正版

原先BlackBerry Desktop Software 6.1与Outlook 2007能正常工作。但后来我把Outlook升级为 2010正版。再打开BBDS 6.1的同步项时发现找不到outlook项,只有Yahoo!,ascii 之类(记不清了)的几个选项。从bb官方论坛找了很长时间,也没有找到解决方案。今天无意中解决了。步骤如下(我只记录了我曾经做过的操作,不代表里面每一步都是必须的),

1. 控制面板,卸载程序,选择BBDS 6.1,在卸载时选择repair,如果提示缺东西,把原BBDS6.1的exe文件解压缩开,将东补上,这样确保原BBDS 6.1是完整的。详见此帖

2. 用Your Uninstaller!把BBDS 6.1卸载掉,YU除了正常的卸载,把一些相关的注册项也给remove掉。

3. 一定重启。安装BBDS 7。安装完成后,打开BBDS 7可以看到outlook同步项。但要注意,BBDS 7.0和7.1在我的环境下均无法正常与Outlook同步,表现在出现COM surrogate stop working,而黑莓手机需要重启才能正常使用。

4. 将BBDS 7用Your Uninstaller!卸载掉。一定重启。

5. 重新安装 BBDS 6.1,发现Outlook 同步项给找回来了。通过BBDS 6.1可以与Outlook正常同步。