如何提取网页里的文本?
http://wawac.blogbus.com/logs/105574703.html比如这个网页里有以下一段内容,我想以“开始”起,到“结束 ”止。中间的内容提取后,输出一个INI文件。该 如何实现 呢?
这样做的目的是,我不想把INI直接 放到服务器上,那样下载下来用是简单了,但是如果下载量大,空间受不了。所以想这样迂回一下,放到BLOG里再提取来用?这样是否可行,大家 还有没有更好的办法 呢?
开始
323323=2323
323323=2323
323323=2323
323323=2323
323323=2323
323323=2323
结束
读取源码,然后用正则匹配提取 正则可以帮到你!可惜我不会! 帮你支持下。 本帖最后由 水木子 于 2011-2-17 12:17 编辑
$sUrl = 'http://wawac.blogbus.com/logs/105574703.html'
$oHTTP = ObjCreate('microsoft.xmlhttp')
$oHTTP.Open('get', $sUrl, False)
$oHTTP.Send()
$sText = BinaryToString($oHTTP.responseBody, 4)
$aRe = StringRegExp($sText, '(?s)(?<=开始)(.+?)结束', 3)
$sRer = StringRegExpReplace($aRe, '<p>|</p>| ', '')
FileWrite('Test.ini', $sRer)
上面代码得到的结果会有空行,当然空行是不影响操作的,如果楼主要去掉空行,可以在第7行下面插入一行如下。
$sRer = StringRegExpReplace($sRer, '^\v+|\r?\n(?=\r?\n)|\r?\n$', '') 弱弱地问一下,对au3里的正则不太熟,好像每次都用(?s)开头,是何含义呢? 回复 6# kevinch
正则表达式!其实正则在各大语言几乎都是通用的,可能有些略有差异。
至于(?s)并不是每次开头都会用到,这要根据不同的表达式来定。
它的含义可以理解为让 “.” 可以跨行匹配,而默认情况下“.” 是不能跨行匹配的。 原来相当于multiline=true啊,看来还是应该多看下au3的正则,跟我会的vbs正则还是很有些不同的 回复 7# 水木子
谢谢水木子,不过我用这段代码提取的是到INI后,打开,这些数据是没有分行的,完全是头尾相接的,这样数据似乎乱了。我再研究一下。谢谢您。 回复 9# imnebula
加上下面一句:
$sRer = StringReplace($sRer, @LF, @CRLF) 学习一下/////////////////// 回复 10# happytc
嗯。太棒了。谢谢您!! StringReplace($sRer, @LF, @CRLF)
替换后,直接使用au3内置的一个函数,更简单
_StringBetween 正则,很多地方都要用到的。 这个要顶,真的很不错,早都想学习了
页:
[1]