Работа с контентом веб-сайта

96 views
Skip to first unread message

Inno Bragovich

unread,
Jan 11, 2018, 9:01:11 AM1/11/18
to Golang Russian
Всем привет! Подскажите, пожалуйста, как правильно работать с контентом вебсайта.
Задача: 
1.спарсить текстовый контент (я имею ввиду, не html-код, а именно конечное представление, это возможно?)
2.прогнать полученный текст по регекспу, получить массив совпадений.

Как делаю:
package main

import "fmt"
import "regexp"
import "net/http"
import "io/ioutil"

func errorChecker(err error) {
if err != nil {
panic(err)
}
}

func main() {
        url := "http://mysite.ru/"
resp, err := http.Get(url)
errorChecker(err)
defer resp.Body.Close()

ht, err := ioutil.ReadAll(resp.Body)
errorChecker(err)
website := string(ht)
fmt.Println(website)
//примерный regexp
    pattern := `mytext\:\s([^\s]+)`
var validID = regexp.MustCompile(pattern)
result := validID.FindAllString(website, -1)
//демонстрация результата
for i := range result {
fmt.Println(result[i])
}

}


На выходе получаю какую-то лабуду типа
041f\u043e\u0436\u0430\u04
3b\u0443\u0439\u0441\u04
0430 \u043f\u043e\u0434
0442\u0432\u0435\u0440\u04
34\u0438\u0442\u0435
043d\u0435 \u0440\u043e\u04
Не понимаю что происходит.

Inno Bragovich

unread,
Jan 11, 2018, 2:37:05 PM1/11/18
to Golang Russian
Вопрос номер два отпадает. Как сделать - понятно, я правильно всё делаю, просто "лабуда" реально в коде сайта.
Остаётся вопрос - можно ли контент получить, чё- то не могу нагуглить.

Alex Lurye

unread,
Jan 11, 2018, 2:47:57 PM1/11/18
to gola...@googlegroups.com
Что вы имеете в виду под "контентом сайта"? В зависимости от ответа есть целый диапазон решений - от простого выкидывания всех тегов при помощи регулярного выражения до парсинга HTML на Go (https://godoc.org/golang.org/x/net/html) или даже запуска настоящего браузера в песочнице (https://godoc.org/github.com/tebeka/selenium) и анализа DOM после парсинга.

--
Вы получили это сообщение, поскольку подписаны на группу "Golang Russian".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес golang-ru+...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Silent

unread,
Jan 14, 2018, 7:29:27 AM1/14/18
to Golang Russian
для работы с контентом есть gokogiri, очень удобно доставать нужный текст/контент/что угодно через css-селекторы (или xpath, кому как удобнее)

Inno Bragovich

unread,
Jan 14, 2018, 6:37:24 PM1/14/18
to Golang Russian
Я имел ввиду, весь текстовый контент, который мы видим в браузере. Только текст, без картинок, видео, тегов, итд. Конечно, не особая проблема взять полный текст html и поубирать теги.. я думал, может есть какое-то нативное готвое решение.

Daniel Podolsky

unread,
Jan 15, 2018, 2:29:16 AM1/15/18
to gola...@googlegroups.com
> Я имел ввиду, весь текстовый контент, который мы видим в браузере.

Надо понимать, что задача "спарсить текстовый контент" современного
html - это примерно как "спарсить текстовый контент" svg. в общем
случае не решается.

а для частных случаев решение есть, конечно, только тут мы вам не
поможем ничем - это ваша задача, мы просто не в курсе.

Inno Bragovich

unread,
Jan 15, 2018, 7:02:00 AM1/15/18
to Golang Russian
Задача - в анализе текстового контента.
Текст нужно примерно как если бы мы на браузере нажали ctrl+a, ctrl+c и в notepad сделали ctrl+v. Далее уже есть понимание как что делать.
Если ничего нативного нету, то не проблема, сфильтрую как-нибудь регекспами.

Silent

unread,
Jan 19, 2018, 2:57:06 PM1/19/18
to Golang Russian
> Если ничего нативного нету, то не проблема, сфильтрую как-нибудь регекспами.
Это самое последнее решение, что должно было придти в голову

>Текст нужно примерно как если бы мы на браузере нажали ctrl+a, ctrl+c и в notepad сделали ctrl+v. Далее уже есть понимание как что делать.
мой совет использовать gokogiri пролетел мимо. повторюсь, уже с примером:
package main

import (
"fmt"
)

func main() {
html := []byte(`
<html>
<head>
</head>
<body>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
<img src='lorem.jpg'/>
<p>Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
<a href='#more'>More >></a>
</body>
</html>
`)

doc, _ := gokogiri.ParseHtml(html)
fmt.Println(doc.Content())
doc.Free()
}

Может быть не нравится gokogiri? Тогда есть еще goquery, он еще проще. Тоже с примером:
package main

import (
"fmt"
"strings"
)

func main() {
html := `
<html>
<head>
</head>
<body>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
<img src='lorem.jpg'/>
<p>Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
<a href='#more'>More >></a>
</body>
</html>
`

doc, _ := goquery.NewDocumentFromReader(strings.NewReader(html))
doc.Find("body").Each(func(i int, s *goquery.Selection) {
fmt.Println(s.Text())
})
}

юзайте стандартные вещи, не надо велосипедов.

Inno Bragovich

unread,
Jan 24, 2018, 4:21:20 PM1/24/18
to Golang Russian

On Friday, January 19, 2018 at 8:57:06 PM UTC+1, Silent wrote:
> Если ничего нативного нету, то не проблема, сфильтрую как-нибудь регекспами.
Это самое последнее решение, что должно было придти в голову
Почему это?
Но мой взгляд, в проекте на сто строк кода проще написать маленький велосипедик ещё на несколько строк, чем тянуть огромный инструмент.
Плюс, я специально делаю велосипед, ибо занимаюсь изучением нежели реализацией.

 
>Текст нужно примерно как если бы мы на браузере нажали ctrl+a, ctrl+c и в notepad сделали ctrl+v. Далее уже есть понимание как что делать.
мой совет использовать gokogiri пролетел мимо. повторюсь, уже с примером:
Вовсе нет. В целом посмотрел оба инструмента. Большое спасибо запримеры!
Reply all
Reply to author
Forward
0 new messages