使用 Go lang 从网页中提取链接

Posted

技术标签:

【中文标题】使用 Go lang 从网页中提取链接【英文标题】:Extract links from a web page using Go lang 【发布时间】:2012-06-20 07:26:21 【问题描述】:

我正在学习google's Go programming language。有谁知道从 html 网页中提取所有 URL 的最佳做法?

来自 Java 世界,有一些库可以完成这项工作,例如 jsoup 、htmlparser 等。但是对于 go lang,我想还没有可用的类似库吗?

【问题讨论】:

【参考方案1】:

你也可以使用"Colly" (documentations), 它通常用于网络报废

特点

    清洁 API 快速(在单核上>1k 请求/秒) 管理每个域的请求延迟和最大并发 自动 cookie 和会话处理 同步/异步/并行抓取 分布式抓取 缓存 非 Unicode 响应的自动编码 Robots.txt 支持 Google App Engine 支持
import (
   "fmt"
   "github.com/gocolly/colly"
)

func main() 
   c := colly.NewCollector()
 
   // Find and visit all links
   c.OnHTML("a", func(e *colly.HTMLElement) 
     e.Request.Visit(e.Attr("href"))
   )
 
   c.OnRequest(func(r *colly.Request) 
    fmt.Println("Visiting", r.URL)
   )

   c.Visit("http://go-colly.org/")

 

【讨论】:

【参考方案2】:

我刚刚为 Go 发布了一个基于事件的开源 HTML 5.0 兼容解析包。你可以find it here

以下是从页面(来自 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 标签、图像、iframe 等)。修改此代码以收集这些代码非常容易。

【讨论】:

【参考方案3】:

虽然用于 HTML 解析的 Go 包确实仍在开发中,但它可以在 go.net 存储库中找到。

它的来源是 code.google.com/p/go.net/html github.com/golang/net,它正在积极开发中。

最近的go-nuts discussion中提到了。


请注意,正如我在 this answer 中提到的那样,使用 Go 1.4(2014 年 12 月),包现在是 golang.org/x/net(请参阅 godoc)。

【讨论】:

Go html 包已移至 go.net 存储库。 Here 是文档。 @ctn 感谢您的更新。不确定您的编辑为什么被拒绝:我已在答案中恢复它。 谢谢。他们说这会改变原意太多,我最好留下评论。【参考方案4】:

如果你了解 jQuery,你会喜欢GoQuery。

老实说,它是我在 Go 中找到的最简单、最强大的 HTML 实用程序,它基于 go.net 存储库中的 html 包。 (好吧,所以它比解析器更高级,因为它不暴露原始 HTML 令牌等,但如果你想用 HTML 文档实际完成任何事情,这个包会有所帮助。)

【讨论】:

【参考方案5】:

我四处搜索,发现有一个名为Gokogiri 的库,听起来像Ruby 的Nogokiri。我认为该项目也是active。

【讨论】:

【参考方案6】:

Go 的 HTML 解析标准包仍在开发中,不是当前版本的一部分。您可能会尝试的第三方软件包是go-html-transform。它正在积极维护中。

【讨论】:

我在任何地方都找不到有关如何使用此库进行抓取的示例,并且从文档中也看不到。谁能给我举个例子? 计划在 Go 中原生包含这个包吗? HTML 包现在可用。在此处阅读文档:godoc.org/golang.org/x/net/html

以上是关于使用 Go lang 从网页中提取链接的主要内容,如果未能解决你的问题,请参考以下文章

如何从网页的不同超链接中提取数据

无法从网页中提取连接到“查看全部”按钮的链接

JavaScript 从网页中提取链接

从网页中提取链接

ruby 从http://2d-gate.org/的网页中提取视频链接

Python中的HTMLParsercookielib抓取和解析网页从HTML文档中提取链接图像文本Cookies