Подтвердить что ты не робот

Извлекайте ссылки с веб-страницы с помощью Go lang

Я изучаю язык google Go. Кто-нибудь знает наилучшую практику для извлечения всех URL-адресов с веб-страницы html?

Из мира Java существуют библиотеки для выполнения этой работы, например jsoup, htmlparser и т.д. Но для go lang, по-моему, не существует доступной подобной библиотеки?

4b9b3361

Ответ 1

Стандартный пакет для синтаксического анализа HTML по-прежнему находится в процессе разработки и не является частью текущей версии. Третий пакет, который вы можете попробовать, это go-html-transform. Он активно поддерживается.

Ответ 2

Если вы знаете jQuery, вам понравится GoQuery.

Честно говоря, это самая простая и мощная утилита HTML, которую я нашел в Go, и она основана на пакете html в репозитории go.net. (Хорошо, так что это более высокий уровень, чем просто синтаксический анализатор, поскольку он не раскрывает необработанные маркеры HTML и т.д., Но если вы действительно хотите что-либо сделать с HTML-документом, этот пакет поможет.)

Ответ 3

Пока пакет Go для разбора HTML действительно продолжается, он доступен в репозитории go.net.

Его источники находятся в code.google.com/p/go.net/html github.com/golang/net, и он активно развивается.

Об этом говорится в недавнем обсуждении go-nuts.


Обратите внимание, что с Go 1.4 (декабрь 2014 года), как я упоминал в этом ответе, теперь пакет golang.org/x/net (см. godoc).

Ответ 4

Я обыскал и обнаружил, что есть библиотека под названием Gokogiri, которая звучит так же, как Nogokiri для Ruby. Я думаю, что проект активен.

Ответ 5

Я только что опубликовал пакет для синтаксического анализа на основе HTML 5.0 с открытым исходным кодом для Go. Вы можете найти его здесь

Вот пример кода, чтобы получить все ссылки со страницы (из элементов A):

links := make([]string)

parser := NewParser(htmlContent)

parser.Parse(nil, func(e *HtmlElement, isEmpty bool) {
    if e.TagName == "link" {
        link,_ := e.GetAttributeValue("href")
        if(link != "") {
            links = appends(links, link)
        } 
    }
}, nil)

Несколько вещей, которые нужно иметь в виду:

  • Это относительные ссылки, а не полные URL-адреса.
  • Динамически сгенерированные ссылки не будут собраны
  • Другие ссылки не собираются (метки META, изображения, фреймы и т.д.). Это довольно легко изменить этот код, чтобы собрать их.