我正在尝试从任何网站的html抓取正文,并且如果html标签只是<html>
,则它可以工作,但是如果它包含任何属性(例如:<html lang="en">
),那么它不会发现有html标签的事实。
我有什么办法可以解决这个问题,并使其忽略任何属性,并看到那里仍然有一个标签?
注意:我之所以使用单独的结构是为了以后可扩展性,因为我对此进行了改进并进一步了解了Go和这些库的工作方式
这是结构:
type html struct {
Body body `xml:"body"`
}
type body struct {
Content string `xml:",innerxml"`
}
这是打印所有内容的方法
//ShowBody prints the body to console
func ShowBody(url string) {
html := html{}
xml.Unmarshal(GetHTTP(url), &html)
fmt.Println(html.Body.Content)
}
GetHTTP函数使用ioutil并从http调用读取页面。如果需要,其余代码在这里:
https://pastebin.com/rbxDLH2e
预期:将整个正文打印到控制台中
实际的:不打印任何内容,因为由于lang属性而看不到
<html>
最佳答案
如果要从HTML文件中提取数据,则可以使用htmlquery来解析和提取数据,如下所示:
doc,err:=htmlquery.LoadURL('http://www.example.com')
body:=htmlquery.FindOne(doc,"//body")
fmt.Println(htmlquery.OutputHTML(body,true))
好消息是它不需要任何
Marshal
和Unmarshal
,它非常灵活。
关于html - 如何使用encoding/xml忽略Go中的html属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427427/