1 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
您實(shí)際上非常接近,因?yàn)槟呀?jīng)在使用正確的解析器(html.Parsefrom golang.org/x/net/html)。
這里的訣竅是頁(yè)面的各種元素很方便地綁定在一起,所以crawler如果你愿意,你可以使用你現(xiàn)有的代碼和以后的過(guò)濾功能。(您可以改為將過(guò)濾直接組合到爬蟲(chóng)中。)
每個(gè)n *html.ElementNode前面都有一些東西,除非它是塊中的初始元素(文檔的第一個(gè)元素或第一個(gè)子節(jié)點(diǎn)),并且某個(gè)東西在n.PrevSibling. 如果它的類型是html.TextNode你有一個(gè)形式的序列:
some text<a ...>thing</a>
您可以檢查上一個(gè)節(jié)點(diǎn)中的“一些文本”:
func wanted(re *regexp.Regexp, n *html.Node) bool {
if n.PrevSibling == nil || n.PrevSibling.Type != html.TextNode {
return false
}
return re.MatchString(n.PrevSibling.Data)
}
這并不完美,因?yàn)槟梢該碛校纾?/p>
text <font></font> broken <font></font>up<a href="lastlink">last link</a>
并且代碼將嘗試匹配 string up,當(dāng)您可能應(yīng)該將文本放在一起text broken up并將其傳遞給匹配器時(shí)。在此處查看更完整的示例。
- 1 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報(bào)