【问题标题】:Get values from same class name values in colly web scraping从 colly web 抓取中的相同类名值中获取值
【发布时间】:2021-12-07 08:56:48
【问题描述】:

我正在使用 Go 语言和构建在 Go 中的 colly 网络抓取框架开发小型网络抓取应用程序

这是网站的html代码

<div clas="cc">  
    <div class="list">
        <span class="countrybg" style="background-image: url(countryimage);"></span>
        <span class="continet">Asia</span>
        <span class="country">india</span>
    </div>
    <div class="list">
        <span class="countrybg" style="background-image: url(countryimage);"></span>
        <span class="continet">Africa</span>
        <span class="country">Brazil</span>
    </div>
</div>   

现在我想一一获取所有三个跨度元素并附加到数组

我尝试使用此代码,但它不起作用,但它返回为 AsiaAfrica
但我想要单独的值并想获取 countrybg 类的图像 url

c := make([]string, 10) 
element.ForEach(".list span", func(_ int, elem *colly.HTMLElement) {
            result := element.ChildText("span:nth-child(2)")
            c = append(c, result)
})

示例输出应该是这样的

countrybg = ['image1url' ,'image2url']
continet = ['Asia' ,'Africa']
country = ['india' ,'Brazil']

谁能帮忙搞定这个

【问题讨论】:

  • 我实际上并不知道 colly 是如何工作的,但看起来您在 element.ForEach 回调中使用了 element。也许你应该使用elem

标签: go go-colly


【解决方案1】:

我在端口 8081 上运行了一个本地服务器,并尝试获取您正在寻找的值。有很多方法可以满足您的需要,这只是其中一种:

package main

import (
    "fmt"
    "regexp"

    "github.com/gocolly/colly"
)

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

    countrybgs := []string{}
    continents := []string{}
    countries := []string{}

    r := regexp.MustCompile(`background-image: url\((.*)\);`)

    /*
        <div clas="cc">
            <div class="list">
                <span class="countrybg" style="background-image: url(image1url);"></span>
                <span class="continet">Asia</span>
                <span class="country">india</span>
            </div>
            <div class="list">
                <span class="countrybg" style="background-image: url(image2url);"></span>
                <span class="continet">Africa</span>
                <span class="country">Brazil</span>
            </div>
        </div>
    */

    c.OnHTML("span", func(e *colly.HTMLElement) {
        switch class := e.Attr("class"); class {
        case "countrybg":
            countrybgs = append(countrybgs, r.FindStringSubmatch(e.Attr("style"))[1])
        case "continet":
            continents = append(continents, e.Text)
        case "country":
            countries = append(countries, e.Text)
        }
    })

    c.Visit("http://localhost:8081")

    fmt.Println(countrybgs)
    fmt.Println(continents)
    fmt.Println(countries)
}

输出:

> go run .
[image1url image2url]
[Asia Africa]
[india Brazil]

【讨论】:

  • 我正在尝试任何其他方式,但如果您以其他方式提供帮助,它会为我返回空数组
  • 如果这是一个公开的页面,您可以与我们共享该页面。
  • 我不能分享页面,但是html代码是一样的,你能帮我做其他选择吗
  • 如何在浏览器或 go 代码中检查 html 代码?这段代码也应该可以工作,如果你按照我的方式运行它,你会看到它可以工作,所以你运行的代码或运行代码的 html 必须有所不同。
  • 我只在浏览器中检查,我会再检查一次我的代码,如果它不起作用,我会回复你
猜你喜欢
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
相关资源
最近更新 更多