返回
Linux(Centos 8)上使用Headless Chrome无头浏览器采集的真实体验
后端
2023-11-29 18:47:25
最近在在采集微信文章的时候,遇到了点棘手的问题,通过搜狗搜索的微信搜索模式,使用普通的直接抓取页面的方式,无法绕过搜狗搜索的验证,因此使用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无头浏览器采集的真实体验,希望对大家有所帮助。如果大家还有其他问题,欢迎随时留言讨论。