在爬取网址的过程中,经常会发现解析页面后,并没有得到想要的内容,这个时候大概就是因为页面内容如果仅仅是普通的curl获取,是无法得到跟浏览器访问一样的效果.
这个时候可能就要用到浏览器访问网址,在golang中有一个很简单的库:go-rod,可以轻松实现通过浏览器访问指定网址.
// 1. 先获取 go get -u github.com/go-rod/rod
// 2. 常见的使用操作
// 配置 rodLauncher
rodLauncher = launcher.New().Leakless(false).
NoSandbox(true).
Headless(true).
Bin("/bin/google-chrome").
Set("disable-infobars").
Set("disable-extensions").
Set("disable-web-security").
Set("allow-running-insecure-content").
Set("reduce-security-for-testing").
Set("", "about:blank").
Set("user-agent", "user-agent-flag").
Set("force-enable-ipv6")
// 创建一个新的浏览器实例,配置无痕模式
rodBrowser = rod.New().Logger(utils.LoggerQuiet).Trace(false).NoDefaultDevice().ControlURL(rodLauncher.MustLaunch())
rodBrowser.Connect()
rodPool := rod.NewPagePool("10")
// Create a page if needed
create := func() *rod.Page {
// We use MustIncognito to isolate pages with each other
page := rodBrowser.MustIncognito().MustPage()
return page
}
page := rodPool.Get(rodCreate)
page.Navigate("http://www.baidu.com/")
body, err := page.HTML()
这样就得到了页面源码,然后就可以采用之前的页面解析dom 的方式获取说需要的元素了