之前,我已经以基本相同的方式(只是在不同的域中)完成了一些这样的程序,但是这次,Colly找不到单个链接,只是在访问首页后退出。谁能看到什么问题? *注意:为清楚起见,我省略了程序的某些部分。
* EDIT:我找到了问题,但没有解决方案。运行curl https://trendmicro.com/vinfo/us/security/research-and-analysis/threat-reports
会在终端中返回301永久移动的错误,但是连接到浏览器中的同一链接会得到我想要的页面。为什么会发生这种情况,我该如何解决?
* EDIT2:我发现执行命令curl -L
可以使curl跟随重定向-然后吐出我需要的网页。但是,如何将其转换为colly?因为colly仍然会收到301错误。
import (
"fmt"
"strings"
"github.com/gocolly/colly"
)
func main() {
/* only navigate to links within these paths */
tld1 := "/vinfo/us/security/research-and-analysis/threat-reports"
c := colly.NewCollector(
colly.AllowedDomains("trendmicro.com", "documents.trendmicro.com"),
)
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
fmt.Printf("Link found: %q -> %s\n", e.Text, link)
if strings.Contains(link, tld1) {
c.Visit(e.Request.AbsoluteURL(link))
}
})
c.OnRequest(func(r * colly.Request) {
fmt.Println("Visiting", r.URL.String())
})
c.Visit("https://trendmicro.com/vinfo/us/security/research-and-analysis/threat-reports")
}
答案 0 :(得分:0)
我找到了解决方案。我将链接https://trendmicro.com/vinfo/us/security/research-and-analysis/threat-reports插入了https://wheregoes.com/retracer.php中,以查找301重定向到的位置,但发现它前面加了一个www。到链接的开头。添加www。到初始c.Visit
字符串的开头以及c.AllowedDomains
部分的操作都像一个超级魅力