正则表达式+文件输出格式,代码已经给出!有点问题,格式问题!(已解决)
本帖最后由 yiruirui 于 2010-11-1 20:46 编辑#include<IE.au3>
#include<array.au3>
#include<file.au3>
$file=FileOpen("result.txt",10)
FileClose($file)
$k=1
$line1=1
$line2=2
$line3=1
Dim $i,$j,$k,$p
$line=1
For $k=1 To 2
$oIE=_IECreate("http://www.9ask.cn/search/findindex.asp?page="&$k&"&pnameid=2",0,0,1,0)
$stext=_IEBodyReadHTML($oIE)
$aReg = StringRegExp($sText, '\D(1\d{9})\D', 3)
$bReg = StringRegExp($sText,'\[上海.+?\]',3)
$cReg = StringRegExp($stext,'<STRONG>(.+?律师)</STRONG>',3)
for $j=0 to UBound($bReg)-1
_FileWriteToLine("result.txt",$line1,$bReg[$j],0)
$line1=$line1+2;
Next
for $i=0 To UBound($bReg)-1
_FileWriteToLine("result.txt",$line2,$aReg[$i],0)
$line2=$line2+2;
Next
For $p=1 To UBound($cReg)-1
$text=FileReadLine("result.txt",$line)
_FileWriteToLine("result.txt",$line3,$text&$cReg[$p],1)
$line3=$line3+2
$line=$line+2
Next
Next
这样的输出结果不是我想要的格式!
我想要的格式如下:
[上海 静安区]刘仍安律师
13341686683
[上海 浦东新区]宫克律师
18917010683
格式:
地区 律师名字
手机号
所以特意来此求高手相助! 顺便补充一点:
For $p=1 To UBound($cReg)-1
这里为什么从1开始呢?是因为我的这个正则表达式:
$cReg = StringRegExp($stext,'<STRONG>(.+?律师)</STRONG>',3) 并不完善,返回的数组中第一个都是
上海律师,我要的是人名+律师,所以这里把它过滤掉了.当然也期待有更完善的办法.期待中....
先说3Q! '(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<' 回复 3# afan
你这个是针对 上海律师这个的吗?能处理掉吗? 一次捕获所有组,然后你想如何组织输出文档都行
回复 5# afan
一次捕获所有组?请问能具体点吗?不懂你的意思!
'(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<'
就是说这个正则表达式可以直接找出所有满足条件的要求? 回复 5# afan
#include<IE.au3>
#include<array.au3>
#include<file.au3>
$file=FileOpen("result1.txt",10)
$line3=1
Dim $p
MsgBox(0,"a","(?s)law01"&'">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06"'& ">([^<]+?)<")
For $k=1 To 2
$oIE=_IECreate("http://www.9ask.cn/search/findindex.asp?page="&$k&"&pnameid=2",0,0,1,0)
$stext=_IEBodyReadHTML($oIE)
$cReg = StringRegExp($stext,"(?s)law01"&'">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06"'& ">([^<]+?)<" ,3)
For $p=0 To UBound($cReg)-1
_FileWriteToLine("result1.txt",$line3,$cReg[$p],0)
$line3=$line3+2
Next
Next
FileClose($file)
运行结果result.txt为空白.什么情况? 很简单的东西为何不用返回值查找问题所在呢? 回复 8# afan
#include <INet.au3>
#include <File.au3>
$file=FileOpen("result.txt",10)
$a = 1
$k = 1
For $k = 1 To 2
$source = _INetGetSource(" http://www.9ask.cn/search/findindex.asp?page=" & $k & "&pnameid=2")
$aReg = StringRegExp($source, '(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">([^<]+?)<', 3)
For $i = 0 To UBound($aReg) - 1
_FileWriteToLine("result.txt", $a, $aReg[$i], 0)
if Mod($i,2) == 0 Then
$a += 0
Else
$a += 1
EndIf
Next
Next 回复 9# yiruirui
格式还是不满足要求,我想
地址 律师
手机号码
可有办法? Local $sData, $sR, $i, $out = '', $File = 'test.txt'
For $x = 1 to 2
$sData = InetRead('http://www.9ask.cn/search/findindex.asp?page=' & $x & '&pnameid=2')
$sR = StringRegExp(BinaryToString($sData), '(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">\D*?(\d+)', 3)
For $i = 0 To UBound($sR) - 1 Step 3
$out &= $sR[$i] & $sR[$i + 1] & @CRLF & $sR[$i + 2] & @CRLF
Next
Next
If $out = '' Then Exit MsgBox(48, '', '获取失败')
FileDelete($File)
If FileWrite($File, $out) Then ShellExecute($File) 回复 11# afan
非常感谢A版主!
有个比较容易点的办法也可以:
分享给大家吧:#include<IE.au3>
#include<array.au3>
#include<file.au3>
$file=FileOpen("result.txt",10)
;FileClose($file)
$k=1
$line1=1
$line2=2
$line3=1
Dim $i,$j,$p
$line=1
For $k=1 To 2
$oIE=_IECreate(" http://www.9ask.cn/search/findindex.asp?page="&$k&"&pnameid=2",0,0,1,0)
$stext=_IEBodyReadHTML($oIE)
$stext=StringRegExpReplace ($stext, "\r\n", "")
$aReg = StringRegExp($sText, '\D(1\d{9})\D', 3)
$bReg = StringRegExp($sText,'\[上海.+?\]',3)
$cReg = StringRegExp($stext,'\[上海.*?<STRONG>(.+?律师)<\/STRONG>',3)
for $j=0 to UBound($bReg)-1
_FileWriteToLine("result.txt",$line1,$bReg[$j]&$cReg[$j],0)
_FileWriteToLine("result.txt",$line1+1,$aReg[$j],0)
Next
next
回复 11# afan
请问A版,(?s)law01">([^<]+?)\s*<.+?<strong>([^<]+?)<.+?law06">\D*?(\d+)
这里的(?s)有什么作用?我认为完全不需要,但是去掉之后出现获取失败的信息窗口。查了很多正则的资料都没找到,麻烦A版给点说明!3Q! 加了(?s)之后“.”可以匹配到任意字符,包括换行 回复 14# afan
哦,晓得了!3Q!
页:
[1]