[已解决]正则表达式提取网页源码数据
本帖最后由 acbs 于 2010-4-24 14:36 编辑这是一个根据手机号码查询手机号归属地的小代码,其中使用正则表达式提取返回的数据不太会,请各位指点,新手刚学,请大家帮忙,谢谢。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("手机号归属地查询工具", 270, 270, 200, 120)
$Label1 = GUICtrlCreateLabel("手机号码", 20, 20, 80, 20)
$Input1 = GUICtrlCreateInput("在此输入手机号", 90, 18, 170, 20)
$Button1 = GUICtrlCreateButton("确定查询", 10, 50, 250, 40, 0)
$Label2 = GUICtrlCreateLabel("归属地:", 10, 112, 84, 28)
$Label3 = GUICtrlCreateLabel("卡类型:", 10, 151, 74, 28)
$Label4 = GUICtrlCreateLabel("区 号:", 10, 192, 64, 28)
$Label5 = GUICtrlCreateLabel("邮 编:", 10, 227, 64, 28)
$Input2 = GUICtrlCreateInput("", 90, 105, 169, 32)
$Input3 = GUICtrlCreateInput("", 90, 147, 169, 32)
$Input4 = GUICtrlCreateInput("", 90, 190, 169, 32)
$Input5 = GUICtrlCreateInput("", 90, 227, 169, 32)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
#include <IE.au3> ;下面的链接可以查电话号码归属地
$ie = InputBox("查询电话","请输入电话号码:","1")
$str="http://www.ip138.com:8080/search.asp?action=mobile&mobile="&$ie
$OIE =_IECreate ($str) IP138页面臃肿,影响速度
不如用http://api.showji.com/locating/?m=13903111234&output=text
提供的接口速度块多了,使用也方便 关键不是用哪个网站,而是提取网页源码中的数据所用的正则不会。 参考一下吧。。
我试一下还是可以用的#include <IE.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("手机号归属地查询工具", 270, 270, 200, 120)
$Label1 = GUICtrlCreateLabel("手机号码", 20, 20, 80, 20)
$Input1 = GUICtrlCreateInput("在这里输入手机号", 90, 18, 170, 20,$ES_NUMBER)
$Button1 = GUICtrlCreateButton("确定查询", 10, 50, 250, 40, 0)
$Label2 = GUICtrlCreateLabel("归属地:", 10, 112, 84, 28)
$Label3 = GUICtrlCreateLabel("卡类型:", 10, 151, 74, 28)
$Label4 = GUICtrlCreateLabel("区 号:", 10, 192, 64, 28)
$Label5 = GUICtrlCreateLabel("邮 编:", 10, 227, 64, 28)
$Input2 = GUICtrlCreateInput("", 90, 105, 169, 32)
$Input3 = GUICtrlCreateInput("", 90, 147, 169, 32)
$Input4 = GUICtrlCreateInput("", 90, 190, 169, 32)
$Input5 = GUICtrlCreateInput("", 90, 227, 169, 32)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$telno = GUICtrlRead($Input1)
GUICtrlSetState($Button1,$gui_disable)
$telinfo = find138($telno)
GUICtrlSetState($Button1,$gui_enable)
If $telinfo Then
GUICtrlSetData($Input2,$telinfo)
GUICtrlSetData($Input3,$telinfo)
GUICtrlSetData($Input4,$telinfo)
GUICtrlSetData($Input5,$telinfo)
Else
Exit
EndIf
EndSwitch
WEnd
Func find138($phn)
Local $telinfo = , $dt = 0
$str = InetGet("http://www.ip138.com:8080/search.asp?action=mobile&mobile=" & $phn,@TempDir & "\data.tmp", 1, 1)
Do
Sleep(250)
$dt += 1
If $dt > 250 Then Return SetError(1,0,0)
Until InetGetInfo($str, 2)
InetClose($str)
$str = FileRead(@TempDir & "\data.tmp")
FileDelete(@TempDir & "\data.tmp")
$phoNo = StringRegExp($str, '您查询的手机号码段</TD>(?s)(.[^>]*)>(.[^<]*)(.*)' & _
'卡号归属地</TD>(?s)(.[^>]*)>(.[^<]*)(.*)' & _
'卡 类 型</TD>(?s)(.[^>]*)>(.[^<]*)(.*)' & _
'区 号</TD>(?s)(.[^>]*)>(.[^<]*)(.*)' & _
'邮 编</TD>(?s)(.[^>]*)>(.[^<]*)', 3)
If Not @error Then
$telinfo = $phoNo
$telinfo = StringReplace($phoNo," "," ")
$telinfo = $phoNo
$telinfo = $phoNo
$telinfo = $phoNo
$telinfo = 5
Else
MsgBox(0, "出错!!", "查询错误!!" & @CRLF & "错误代码: " & @error)
EndIf
Return $telinfo
EndFunc ;==>find138 谢谢楼上的,学习消化一下。 提示出错了,不知道啥原因:
ERROR: InetGetInfo(): undefined function.
Until InetGetInfo($str, 2)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 测试了6楼的代码,不错能够正常使用。 回复 8# acbs 那为什么我的会有这个错误提示,楼上的可以指点一下吗? 回复 11# acbs
可能你的autoit的程序问题。。。你重au3装一下
像是少文件。。
或是版本太老
下个新的试 试 #include <Inet.au3>
Local $Text = ['号码归属地:', '卡类型:', '区 号:', '邮 编:'], $sText, $z = 0
$Number = InputBox('手机号码归属地查询', '请输入需要查询的手机号!')
If @error = 0 Then
$Source = _INetGetSource('http://www.ip138.com:8080/search.asp?action=mobile&mobile=' & $Number)
$sRep = StringRegExpReplace($Source, ' |\n|\r|\s', '')
$sReg = StringRegExp($sRep, '卡号归属地</TD>.+?tdc2>(.+?)</TD>|卡类型.+?tdc2>(.+?)</TD>|区号</TD>.+?tdc2>(.+?)</TD>|邮编</TD>.+?tdc2>(.+?)<ahref', 3)
For $i = 0 To UBound($sReg) -1
If $sReg[$i] = '' Then ContinueLoop
$sText &= $Text[$z] & $sReg[$i] & @CRLF & @CRLF
$z += 1
Next
MsgBox(0, '查询结果:', $sText)
EndIf 13楼不错,谢啦,运行通过。
消化一下。 又学习了一些 从此程序中学习了大量的知识,不错呀!感谢楼主的提问和感谢同胞们无私的觖答! 学习ing,谢谢
页:
[1]
2