golang 爬虫 mysql_基于golang的爬虫实战

基于golang的爬虫实战

前言

爬虫本来是python的强项,前期研究过scrapy,也写过一些简单的爬虫小程序,但是后来突然对golang产生兴趣,决定写写爬虫练练手。由于本人golang萌新,有错误之处,欢迎指正。

大致思路

由于现在动态页面比较多,因此考虑通过WebDriver驱动Chrome等页面渲染完成再抓取数据。(刚开始是用Phantomjs,后来这货不维护了,而且效率不算高)

一般爬虫程序运行在linux系统中,所以考虑Chrome的headless模式。

数据抓取到之后保存到CSV文件中,然后通过邮件发送出去。

不足之处

因为需要渲染,所以速度会降低不少,即便是不渲染图片,速度也不是很理想。

因为刚开始学习,所以多线程什么的也没加进去,怕内存会崩盘。

没有将数据写入到数据库,放到文件里毕竟不是最终方案。

需要的库

github.com/tebeka/selenium

golang版的selenium,能实现大部分功能。

gopkg.in/gomail.v2

发送邮件用到的库,很久不更新了,但够用。

下载依赖包

本打算用dep管理依赖,结果这货坑还挺多,未研究明白不敢误人,暂时放弃。

通过go get 下载依赖包

go get github.com/tebeka/selenium

go get gopkg.in/gomail.v2

代码实现

启动chromedriver,用来驱动Chrome浏览器。

// StartChrome 启动谷歌浏览器headless模式

func StartChrome() {

opts := []selenium.ServiceOption{}

caps := selenium.Capabilities{

"browserName": "chrome",

}

// 禁止加载图片,加快渲染速度

imagCaps := map[string]interface{}{

"profile.managed_default_content_settings.images": 2,

}

chromeCaps := chrome.Capabilities{

Prefs: imagCaps,

Path: "",

Args: []string{

"--headless", // 设置Chrome无头模式

"--no-sandbox",

"--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7", // 模拟user-agent,防反爬

},

}

caps.AddChrome(chromeCaps)

// 启动chromedriver,端口号可自定义

service, err = selenium.NewChromeDriverService("/opt/google/chrome/chromedriver", 9515, opts...)

if err != nil {

log.Printf("Error starting the ChromeDriver server: %v", err)

}

// 调起chrome浏览器

webDriver, err = selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", 9515))

if err != nil {

panic(err)

}

// 这是目标网站留下的坑,不加这个在linux系统中会显示手机网页,每个网站的策略不一样,需要区别处理。

webDriver.AddCookie(&selenium.Cookie{

Name: "defaultJumpDomain",

Value: "www",

})

// 导航到目标网站

err = webDriver.Get(urlBeijing)

if err != nil {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值