如何使用 go colly 获取页面上的多个元素

Ali*_*eza 0 go web-scraping

我有一个结构如下:

Type Post struct{
     ID int64
     Title string
     Content string
}
Run Code Online (Sandbox Code Playgroud)

我使用Go Colly卷曲一个网页来接收数据,我有两个 OnHtml 方法,如下所示:

func main() {
    c := colly.NewCollector()

    c.OnHTML("p", func(e *colly.HTMLElement) {
        Post := Post{
           Content: e.Text
        }
        db.Create(&Post)
    })
    c.OnHTML("h", func(e *colly.HTMLElement) {
        Post := Post{
           Title: e.Text
        }
        db.Create(&Post)        
    })

    c.Visit("http://go-colly.org/")
}
Run Code Online (Sandbox Code Playgroud)

上面的代码运行良好,但这会在数据库中创建两行,如下所示:

+--------------+---------------+---------------+
|      id      |     title     |    content    |
+--------------+---------------+---------------+
|       1      |      Hello    |      Null     |
+--------------+---------------+---------------+
|       2      |      Null     | Mycontent ... |
+--------------+---------------+---------------+
Run Code Online (Sandbox Code Playgroud)

我想创建它:

+--------------+---------------+---------------+
|      id      |     title     |    content    |
+--------------+---------------+---------------+
|       1      |      Hello    | Mycontent ... |
+--------------+---------------+---------------+
Run Code Online (Sandbox Code Playgroud)

如何在 go colly 中获取两个元素并保存在一行中?

Kan*_*o13 6

您应该阅读此示例:http ://go-colly.org/docs/examples/coursera_courses/在有的行detailCollector.OnHTML("div[id=rendered-content]", func(e *colly.HTMLElement) {

该示例在封装整个内容的元素(此处为 div)上设置了 onHTML,因此对于您来说,您需要找到封装包含标题 + 内容的每个帖子的元素,然后执行 e.ForEach 来解析每个帖子。

编辑: http: //go-colly.org/docs/examples/factbase/也是您的用例的一个很好的例子。获取正文,然后用演讲者和文本解析每个主题。

明白了吗?