Chinaunix
标题:
怎样获取HTML中的URL
[打印本页]
作者:
wesouler
时间:
2009-02-19 13:59
标题:
怎样获取HTML中的URL
input:
<a href="http://test1/" target="_blank">TEST_ONE</a><tr>foo</tr>
<a href="http://test2/index.asp?id=xxx"
target="_blank">TEST_TWO</a><div>foo</div>
<a href="http://10.1.1.10/" target="_blank">
<font color="red">TEST_DEC</font></a>
<a href="http://10.1.1.10:8080/" target="_blank">TEST_PORT</a>
output:
http://test1.com/
TEST_ONE
http://test2.com/index.asp?id=xxx
TEST_TWO
http://10.1.1.10/
TEST_DEC
http://10.1.1.10:8080/
TEST_PORT
用awk应该怎么实现呢,特别是第二行,断开的anchor怎么处理~?谢谢~
[
本帖最后由 wesouler 于 2009-2-19 14:24 编辑
]
作者:
wesouler
时间:
2009-02-19 14:20
感觉(">).*(</a)把http分离出来,再用^(http(s?)\:\/\/|~/|/)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?/?(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?提取。可是,这个两行的后面的名字怎么弄?
[
本帖最后由 wesouler 于 2009-2-19 14:33 编辑
]
作者:
dream3401
时间:
2009-02-19 14:43
awk -v RS="</a>" '$1=$1{print $0"</a>"}' file|perl -p -e 'my($href,$word)=m/<a href="(.+?)".*>([^\s]+?)<.*/;$_="$href $word\n";'
不知道sed里的正则有没有“非贪婪”这一项,所以用了PERL里的正则,请参考
作者:
ly5066113
时间:
2009-02-19 15:05
标题:
回复 #1 wesouler 的帖子
sed -r ':a;/<\/a>/!{N;s/\n//;ba};s/.*href="([^"]+)".*>(TEST[^<]+)<.*/\1 \2/' urfile
[
本帖最后由 ly5066113 于 2009-2-19 15:12 编辑
]
作者:
welcome008
时间:
2009-02-19 15:07
是否可以先合并行?
非以<a打头的行,全部合并到上一行去,再处理,会不会有不能合并的行?
作者:
我是DBA
时间:
2009-02-19 15:23
标题:
回复 #5 welcome008 的帖子
应该可以的
作者:
dream3401
时间:
2009-02-19 15:33
原帖由
ly5066113
于 2009-2-19 15:05 发表
sed -r ':a;//!{N;
s/\n//;
ba};s/.*href="([^"]+)".*>(TEST[^
"s/\n//;"这个是否可以省略?
作者:
wxhh12sh
时间:
2009-02-19 15:58
sed -r ':a;/<\/a>/!{N;s/\n//;ba};s/.*href="([^"]+)".*>(TEST[^<]+)<.*/\1 \2/' urfile
看不明白可不可以讲解一下啊
作者:
ubuntuer
时间:
2009-02-19 16:22
呵呵,一般是可以省略的.但是如果url换行了就不能不要了......
还是加s/\n//吧
作者:
wesouler
时间:
2009-02-19 18:24
谢谢各位,特别是3楼:)。加一个 sed /^.&/d|grep ^http得到结果。
input可能有点误导了,不一定是TEST,也可能是其它的字符,非常感谢各位~学到了不少啊。
[
本帖最后由 wesouler 于 2009-2-19 18:51 编辑
]
作者:
wesouler
时间:
2009-02-19 19:16
awk -v RS="</a>" '$1=$1{print $0"</a>"}' file|perl -p -e 'my($href,$word)=m/<a href="(.+?)".*>([^\s]+?)<.*/;$_="$href $word\n";'
分解一下:
1.把</a>做为分隔符,$1=$1去掉多余的符号,输出所有内容并加上</a>结尾
2.'my($href,$word)=m/<a href="(.+?)".*>([^\s]+?)<.*/;把 href=""中的作为参数$href,></之间的作为参数$word
3.$_="$href $word\n";'输出$href,$word
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2