首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在colly web抓取中从相同的类名值中获取值

在colly web抓取中从相同的类名值中获取值
EN

Stack Overflow用户
提问于 2021-10-20 14:13:47
回答 1查看 336关注 0票数 3

我正在使用go语言和在Go中构建的colly web scraping框架开发小型web scraping应用程序。

这是网站的html代码

代码语言:javascript
复制
<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>   

现在,我想逐个获取所有三个span元素,并将其附加到array中

我尝试使用此代码,但它不起作用,但它返回为AsiaAfrica

但是我想要单独的值,并且想要获取countrybg类的图像url

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

示例输出应如下所示

代码语言:javascript
复制
countrybg = ['image1url' ,'image2url']
continet = ['Asia' ,'Africa']
country = ['india' ,'Brazil']

有谁能帮我拿到这个吗

EN

回答 1

Stack Overflow用户

发布于 2021-10-23 05:58:06

我在端口8081上运行了一台本地服务器,并尝试获取您要查找的值。有很多方法可以做你需要的事情,这只是其中之一:

代码语言:javascript
复制
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)
}

输出:

代码语言:javascript
复制
> go run .
[image1url image2url]
[Asia Africa]
[india Brazil]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69647647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档