0
package main

import (
"encoding/csv"
"fmt"
"os"

"github.com/gocolly/colly"
)

 func checkError(err error){
 if err!=nil{
    panic(err)
}
}
func main(){
fName:="data.csv"
file,err:=os.Create(fName)
checkError(err)
defer file.Close()
writer:=csv.NewWriter(file)
defer writer.Flush()
c:=colly.NewCollector(colly.AllowedDomains("forbes.com","www.forbes.com"))
c.OnHTML(".scrolly-table tbody tr", func(e *colly.HTMLElement) {
        writer.Write([]string{
            e.ChildText(".rank .ng-binding"),
        })
    })  
    c.OnError(func(_ *colly.Response, err error) {
        fmt.Println("Something went wrong:", err)
    })
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL)
    })
    c.OnResponse(func(r *colly.Response) {
        fmt.Println("Visited", string(r.Body))
    })
    c.Visit("https://forbes.com/real-time-billionaires/")
     }

这是我的代码,当我请求我得到后备页面时,这是我试图抓取的福布斯链接

我注意到该网站使用的哈希路径位于 url 的最后一部分,我不能用相同的 url 请求两次,我认为它与抓取有关,有人可以帮我吗?

4

2 回答 2

2

如果您在浏览器中禁用 javascript,请确保可用的内容(您可以使用开发人员工具进行操作)。大多数抓取工具只会为您提供页面的文本表示,而浏览器也会针对它运行 javascript 引擎。如果您尝试抓取的数据是用 Javascript 填充的,那么很有可能这就是您无法抓取它的原因。

于 2021-11-01T05:23:11.000 回答
0

Colly 只能用于静态抓取,chromedp 可以用于抓取客户端渲染的应用程序。

于 2021-11-01T13:56:04.143 回答