我的代码是这样工作的:
有一个源类型,它有一个地址和一个源包含的对象,这个对象有一个css选择器,其中包含关于它的所有信息,除了选择器之外,它还包含字段,字段有一个对应于给定的名称选择器和值。
编码
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"net/http"
)
type Item struct {
Selector string
Fields []Field
}
type Field struct {
Name string
Selector string
Value string
}
type Source struct {
Address string
Item Item
}
func (s Source) ParseData() Item {
request, _ := http.Get(s.Address)
html, _ := goquery.NewDocumentFromReader(request.Body)
html.Find(s.Item.Selector).First().Each(
func(index int, item *goquery.Selection) {
for _, field := range s.Item.Fields {
field.Value = item.Find(field.Selector).Text()
}
})
return s.Item
}
func main() {
stopGame := Source{
Address: "https://stopgame.ru/games",
Item: Item{
Selector: ".simple-list .item",
Fields: []Field{
{
Name: "Caption",
Selector: ".caption",
},
{
Name: "About",
Selector: ".game-specs",
},
{
Name: "Rating",
Selector: ".score",
},
},
},
}
for _, field := range stopGame.ParseData().Fields {
fmt.Println(field.Value)
}
}
当涉及到执行一个循环,该循环遍历从源接收到的对象的所有字段并显示该字段的值时,则什么都不显示
因此,您将数据写入结构的副本,而不是结构本身:
通过索引或指针写入结构本身: