imnebula 发表于 2011-2-17 05:40:41

如何提取网页里的文本?

http://wawac.blogbus.com/logs/105574703.html

比如这个网页里有以下一段内容,我想以“开始”起,到“结束 ”止。中间的内容提取后,输出一个INI文件。该 如何实现 呢?

这样做的目的是,我不想把INI直接 放到服务器上,那样下载下来用是简单了,但是如果下载量大,空间受不了。所以想这样迂回一下,放到BLOG里再提取来用?这样是否可行,大家 还有没有更好的办法 呢?


开始



323323=2323

323323=2323

323323=2323





323323=2323

323323=2323

323323=2323



结束

kevinch 发表于 2011-2-17 10:25:00

读取源码,然后用正则匹配提取

hzxymkb 发表于 2011-2-17 10:35:57

正则可以帮到你!可惜我不会!

guang19831217 发表于 2011-2-17 11:31:36

帮你支持下。

水木子 发表于 2011-2-17 12:11:23

本帖最后由 水木子 于 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>|&nbsp;', '')
FileWrite('Test.ini', $sRer)

上面代码得到的结果会有空行,当然空行是不影响操作的,如果楼主要去掉空行,可以在第7行下面插入一行如下。
$sRer = StringRegExpReplace($sRer, '^\v+|\r?\n(?=\r?\n)|\r?\n$', '')

kevinch 发表于 2011-2-17 16:13:11

弱弱地问一下,对au3里的正则不太熟,好像每次都用(?s)开头,是何含义呢?

水木子 发表于 2011-2-17 16:25:04

回复 6# kevinch
正则表达式!其实正则在各大语言几乎都是通用的,可能有些略有差异。

至于(?s)并不是每次开头都会用到,这要根据不同的表达式来定。
它的含义可以理解为让 “.” 可以跨行匹配,而默认情况下“.” 是不能跨行匹配的。

kevinch 发表于 2011-2-17 18:36:01

原来相当于multiline=true啊,看来还是应该多看下au3的正则,跟我会的vbs正则还是很有些不同的

imnebula 发表于 2011-2-20 04:00:05

回复 7# 水木子


谢谢水木子,不过我用这段代码提取的是到INI后,打开,这些数据是没有分行的,完全是头尾相接的,这样数据似乎乱了。我再研究一下。谢谢您。

happytc 发表于 2011-2-20 04:19:15

回复 9# imnebula
加上下面一句:
$sRer = StringReplace($sRer, @LF, @CRLF)

the886 发表于 2011-2-20 16:40:05

学习一下///////////////////

imnebula 发表于 2011-2-22 03:48:46

回复 10# happytc

嗯。太棒了。谢谢您!!

minterz 发表于 2011-2-22 19:54:34

StringReplace($sRer, @LF, @CRLF)
替换后,直接使用au3内置的一个函数,更简单
_StringBetween

51ak 发表于 2011-2-22 23:08:57

正则,很多地方都要用到的。

wsfda 发表于 2011-2-23 20:30:29

这个要顶,真的很不错,早都想学习了
页: [1]
查看完整版本: 如何提取网页里的文本?