chromedp和Go语言相结合采集天涯社区

99 阅读2分钟

今天还是给大家带来采集天涯社区的一个代码示例,主要是用chromedp和Go语言相结合编写而成,相对比较复杂,主要对于进阶中的老手可能会有些帮助,让我们一起来看看,这段代码究竟难在哪里。

```gopackage mainimport ("context""fmt""github.com/chromedp/chromedp""github.com/chromedp/chromedp/cdp""github.com/chromedp/chromedp/protocol/network""github.com/chromedp/chromedp/protocol/page""github.com/chromedp/chromedp/protocol/target""github.com/chromedp/chromedp/protocol/tracing""io/ioutil""net/http""net/url""strings")func main() {// 创建一个Chrome会话ctx, cancel := context.WithCancel(context.Background())defer cancel()// 使用自定义的HTTP客户端,以便在网络请求中使用代理customClient := &http.Client{Transport: &http.Transport{Proxy: http.ProxyFromEnvironment,},}// 使用自定义的URL解析器,以便在解析URL时使用代理customURL, _ := url.Parse("https://www.tianya.cn")// 获取代理服务器proxy, err := getProxy(customClient, customURL)if err != nil {fmt.Printf("Error getting proxy: %v\n", err)return}// 设置代理服务器chromedp.SetProxy(proxy)// 创建一个新的浏览器实例browser, err := chromedp.NewBrowser(ctx, chromedp.WithProxy(proxy))if err != nil {fmt.Printf("Error creating browser: %v\n", err)return}// 打开一个新的标签页page, err := browser.NewPage(ctx)if err != nil {fmt.Printf("Error creating page: %v\n", err)return}// 导航到www.tianya.cnerr = page.Navigate(ctx, "https://www.tianya.cn")if err != nil {fmt.Printf("Error navigating: %v\n", err)return}// 等待页面加载err = page.Wait(ctx, cdp.PageLoadEventFired)if err != nil {fmt.Printf("Error waiting for page load: %v\n", err)return}// 获取页面内容content, err := page.GetContent(ctx)if err != nil {fmt.Printf("Error getting content: %v\n", err)return}// 保存页面内容到文件err = ioutil.WriteFile("tianya.html", []byte(content), 0644)if err != nil {fmt.Printf("Error saving file: %v\n", err)return}fmt.Println("Download completed!")}func getProxy(client *http.Client, url *url.URL) (string, error) {resp, err := client.Get(url.String())if err != nil {return "", err}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {return "", err}// 从HTML内容中提取代理服务器地址proxy := strings.Split(string(body), "\"")[1]return proxy, nil}```

同样的,这段代码首先获取代理服务器地址,然后使用chromedp库创建一个新的Chrome会话,设置代理,创建一个新的浏览器实例,然后导航到天涯社区,这是一个难点。在页面加载后,程序获取页面内容并将其保存到一个文件中。注意,这个示例代码天涯社区网站是不会更改的,且代理服务器获取的方式可能需要根据实际情况进行调整。在实际应用中,我们可能需要稍微添加自己需要的内容以确保稳定性。