[ 22.06.2013 23:23:41 UTC ]--[ PRE ]--[ <a href="?section=0DAY" title="SHOW ONLY 0DAY">0DAY</a> ]--[ <a href="?search=Aminsamples+Sexy+Melody+Vol+2+MIDI+6581">Aminsamples.Sexy.Melody.Vol.2.MIDI-6581</a> ]--<b>[ 2.30MB ]</b>--<b>[ 1F ]</b>--<span style="font-weight: bold;">[ <a href="download/Aminsamples.Sexy.Melody.Vol.2.MIDI-6581.rar" title="Aminsamples.Sexy.Melody.Vol.2.MIDI-6581.rar">DOWNLOAD</a> ]
我想抓住这样显示的数据。
[ 22.06.2013 23:23:41 UTC ]--[ PRE ]--[ 0DAY ]--[ Aminsamples.Sexy.Melody.Vol.2.MIDI-6581 ]--[ 2.30MB ]--[ 1F ]--[ DOWNLOAD ]
但是我不太确定我是怎么做到的,我能抓住的就是 Aminsamples.Sexy.Melody.Vol.2.MIDI-6581.rar
我想在TCL中做到这一点
这是我目前得到的。
catch {set http [::http::geturl http://www.prelist.ws -timeout 15000]} error
if {[string match "*error*" $error]} { puts "connect error!" ; return 0 }
if {[string match "*timeout*" $error]} { puts "timeout!"; return 0 }
set html [::http::data [split $http "\n"]]
regsub -all "&" $html {\&} html
regsub -all "×" $html {*} html
regsub -all " " $html { } html
regsub -all -nocase "×" $html "x" html
regsub -all -nocase "<" $html "<" html
regsub -all -nocase ">" $html ">" html
regsub -all ">" $html "" html
regsub -all "<tt" $html "" html
foreach line $html {
if {[string match "*SHOW*" $line]} { continue }
if {[string match "*title*" $line]} {
regexp -nocase -- {title="(.*?)>} $line -> all line
regsub -all -nocase "title=" $line {} line
regsub -all -nocase "DOWNLOAD" $line {} line
regsub -all -nocase "\"</a" $line {} line
regsub -all -nocase "\"free" $line {} line
regsub -all -nocase "\"" $line {} line
regsub -all -nocase "\\\[" $line {} line
regsub -all -nocase "<title" $line {} line
regsub -all -nocase "\\\]</title" $line {} line
puts "$line"
}
}
答案 0 :(得分:2)
使用xpath可以轻松完成:
#! /usr/bin/tclsh
package require tdom
set fp [open "input.txt" r]
set html [read $fp]
close $fp
set doc [ dom parse -html $html ]
set root [$doc documentElement]
set itemNodes [$doc selectNodes {//div[@id="list"]/tt/small}]
foreach itemNode $itemNodes {
puts "[$itemNode asText]"
}
请注意,您可以使用此模式拆分每个字段:
foreach itemNode $itemNodes {
set line "[string trim [$itemNode asText] \[\]\ ]"
set fields [regexp -inline -all -- {[^[\s][^][]*?\S(?=\s*(?:]|$))} $line]
puts [lindex $fields 2]
}