【问题标题】:How to get multiple element on a page with go colly如何使用 go colly 在页面上获取多个元素
【发布时间】:2020-03-09 19:11:51
【问题描述】:

我有一个结构如下:

Type Post struct{
     ID int64
     Title string
     Content string
}

我使用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/")
}

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

+--------------+---------------+---------------+
|      id      |     title     |    content    |
+--------------+---------------+---------------+
|       1      |      Hello    |      Null     |
+--------------+---------------+---------------+
|       2      |      Null     | Mycontent ... |
+--------------+---------------+---------------+

我想创建它:

+--------------+---------------+---------------+
|      id      |     title     |    content    |
+--------------+---------------+---------------+
|       1      |      Hello    | Mycontent ... |
+--------------+---------------+---------------+

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

【问题讨论】:

    标签: go web-scraping


    【解决方案1】:

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

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

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

    清楚吗?

    【讨论】:

      猜你喜欢
      • 2023-01-04
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2015-05-24
      • 2013-12-14
      相关资源
      最近更新 更多