找回密码
 加入
搜索
查看: 1150|回复: 4

请教一个网页源文件乱码的问题

[复制链接]
发表于 2009-10-11 13:09:05 | 显示全部楼层 |阅读模式
本帖最后由 yigao 于 2009-10-11 14:16 编辑

这是改造自动投票机过程中遇到的问题
想实现自动投票需要首先判断某个问题中有几个回答内容,哪个内容字数最多。在网页源文件中有如下关键词可供判断第一个问题:
1、备选答案(5),抑或,备选答案(18)、……
2、回答1、回答2……回答5,抑或,回答1、回答2……回答18
就是说判断某个问题有几个回答内容我用正则搜索出备选答案后面跟着的数字或者有几个回答后面跟着数字的就可以了。
下面就是遇到的问题了。
我在下载了问题网页的源文件后中文是乱码,将源文件改为UT8格式后绝大多数中文都可以正常显示了,唯有备选答案的“案”字不正常,“案”和后面的“(”合并成了“?”,所以正则根本无法匹配出来。以前在AHK中我一直用这四个字后面的数字决定下面的内容该怎么做,现在换成AU3束手无策了。
当我改变为第二个判断条件,就是判断有多少回答n,结果可以实现。但存在一个关键问题——问题超过15个的回答内容都在下一页,当前页最多只有15个回答内容。例如共有18个回答内容,下载的这一页源文件只有15个回答n,其余的都在第二页。这就说明这样判断不全面。

我希望能解决第一个“案”为乱码的问题!
$Ieurl ="http://ks.cn.yahoo.com/question/1509072401439.html"
        $file=_INetGetSource($IeUrl)
        $file = BinaryToString($file,4)
        FileWrite("d:\My AutoIt\temp.txt",$file)
        $file = FileRead("d:\My AutoIt\temp.txt")
        $array=StringRegExp($file, '备选答?\d{1,2}', 3)
        msgbox(0,"",@Error,1)
        for $j = 0 to UBound($array) - 1
        msgbox(0,"",$array[$j])
        Next
也曾尝试这样的正则StringRegExp($file, '备选答(.*)\d{1,2}', 3),这样是可以匹配出来,但内容太长了,不是自己真正需要的。
发表于 2009-10-11 14:04:58 | 显示全部楼层
#include <Inet.au3>
$Ieurl = 'http://ks.cn.yahoo.com/question/1509072401439.html'
$oHTTP = ObjCreate('microsoft.xmlhttp')
$oHTTP.Open('get', $Ieurl, False)
$oHTTP.Send()
$sReturn = BinaryToString($oHTTP.responseBody, 4)
$array = StringRegExp($sReturn, '备选答案\((\d+)\)<span', 3)
If Not @error Then MsgBox(64, '备选答案', $array[0])

评分

参与人数 1金钱 +5 收起 理由
yigao + 5

查看全部评分

 楼主| 发表于 2009-10-11 14:11:36 | 显示全部楼层
非常好!能讲讲乱码解决的方法吗?我看你的代码中也有BinaryToString,标志也是4,和我的区别在哪里?谢谢!
发表于 2009-10-11 14:29:51 | 显示全部楼层
区别的关键不在 BinaryToString ~
_INetGetSource 函数乱码问题严重,我一般不用,用 microsoft.xmlhttp 好了
 楼主| 发表于 2009-10-11 15:17:03 | 显示全部楼层
明白了,谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-5 00:43 , Processed in 0.086086 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表