Как игнорировать атрибуты html в Go, используя кодировку / xml? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь очистить тело от HTML любого веб-сайта, и это работает, если тег html просто <html>, но если он включает какие-либо атрибуты (например: <html lang="en">), тогда он не поднимаетфакт наличия html-тега.

Можно ли как-нибудь обойти это и заставить его игнорировать какие-либо атрибуты и увидеть, что тег еще есть?

note: причина, по которой я использую отдельные структуры, заключается в дальнейшем расширении, поскольку я совершенствуюсь и узнаю больше о том, как работают 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

ожидается: печатает все тело в консоль

актуально: ничего не печатает, поскольку он не видит <html> из-за атрибута lang

1 Ответ

0 голосов
/ 27 октября 2019

Если вы хотите извлечь данные из HTML-файла, вы можете взять htmlquery для анализа и извлечения данных, например:

doc,err:=htmlquery.LoadURL('http://www.example.com')
body:=htmlquery.FindOne(doc,"//body")
fmt.Println(htmlquery.OutputHTML(body,true)) 

Хорошо, что это не нужнолюбые Marshal и Unmarshal, очень гибкие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...