返回

Linux(Centos 8)上使用Headless Chrome无头浏览器采集的真实体验

后端

最近在在采集微信文章的时候,遇到了点棘手的问题,通过搜狗搜索的微信搜索模式,使用普通的直接抓取页面的方式,无法绕过搜狗搜索的验证,因此使用gorequest成功的采集到微信文章。

引言

随着网络的发展,数据的重要性日益凸显,而网络爬虫作为获取数据的一种重要手段,也受到了越来越多的关注。本文将为大家分享我在Linux(Centos 8)上使用Headless Chrome无头浏览器采集的真实体验,并提供详细的Golang采集代码。

为什么要使用Headless Chrome?

Headless Chrome是一个无界面的浏览器,它可以像普通浏览器一样执行 JavaScript 代码,但不会显示任何图形界面。这使得它非常适合用于网络爬虫,因为它可以避免图形界面的开销,从而提高爬虫的效率。

如何在Linux(Centos 8)上安装Headless Chrome?

在Linux(Centos 8)上安装Headless Chrome非常简单,只需执行以下命令即可:

yum install chromium-headless

如何使用Headless Chrome进行网络爬虫?

安装好Headless Chrome之后,就可以开始使用它进行网络爬虫了。这里以采集搜狗搜索的微信搜索结果为例,为大家详细介绍一下具体的操作步骤。

1. 导入必要的库

import (
	"context"
	"fmt"
	"log"
	"os"

	"github.com/chromedp/cdproto/cdp"
	"github.com/chromedp/chromedp"
)

2. 设置Headless Chrome的选项

options := []chromedp.ExecAllocatorOption{
	chromedp.Headless,
	chromedp.NoSandbox,
}

3. 创建一个新的chromedp.Context

ctx, cancel := chromedp.NewContext(context.Background(), options...)

4. 导航到要爬取的页面

if err := chromedp.Run(ctx, chromedp.Navigate("https://weixin.sogou.com/")); err != nil {
	log.Fatal(err)
}

5. 等待页面加载完成

if err := chromedp.Run(ctx, chromedp.WaitReady("body")); err != nil {
	log.Fatal(err)
}

6. 滚动页面到底部

if err := chromedp.Run(ctx, chromedp.ScrollIntoView("body", chromedp.BySearch)); err != nil {
	log.Fatal(err)
}

7. 获取页面内容

var html string
if err := chromedp.Run(ctx, chromedp.EvaluateAsDevTools("document.documentElement.outerHTML", &html)); err != nil {
	log.Fatal(err)
}

8. 关闭Headless Chrome

defer cancel()

9. 保存页面内容

if err := os.WriteFile("weixin.html", []byte(html), 0644); err != nil {
	log.Fatal(err)
}

10. 运行程序

go run main.go

结语

以上就是我在Linux(Centos 8)上使用Headless Chrome无头浏览器采集的真实体验,希望对大家有所帮助。如果大家还有其他问题,欢迎随时留言讨论。