• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
jgbb
博客园    首页    新随笔    联系   管理    订阅  订阅
go实现爬虫
golang实现网络爬虫,包括所需条件,实现流程,以及代码
条件:
1.第三方包github.com/tebeka/selenium,selenium自动化测试工具
2.google驱动chromedriver.exe,要与本地浏览器的版本号对应,下载:http://npm.taobao.org/mirrors/chromedriver/
流程:
1.开启google驱动服务
2.设置浏览器参数
3.开启浏览器窗口,每次调用wd,_ :=selenium.NewRemote函数都会开启一个窗口。
3.1.比如调用页面中的某个组件,wd.FindElements(selenium.ByCSSSelector, ".xxx"),选择器符合W3C规范即可。
4.关闭窗口,webDriver.Quit()
5.关闭驱动服务,crawler.Service.Stop()
代码
type Crawler struct {
    ChromeDriver string
    Port         int
    Service      *selenium.Service
    Caps selenium.Capabilities
}

//开启驱动服务
func NewCrawler() (*Crawler,error) {
    crawler := &Crawler{
        ChromeDriver: `E:/go_workspace/src/my_common_utils/chromedriver.exe`,//google浏览器驱动
        Port:         9515,
        Service:      nil,
    }
    opts := []selenium.ServiceOption{}
    service, err := selenium.NewChromeDriverService(crawler.ChromeDriver, crawler.Port, opts...)
    if nil != err {
        return nil,errors.New("start a chromedriver service falid,"+err.Error())
    }
    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", //不弹出窗口
            "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", // 模拟user-agent,防反爬
        },
    }
    //以上是设置浏览器参数
    caps.AddChrome(chromeCaps)
    crawler.Service = service
    crawler.Caps = caps
    return crawler,nil
}

//打开窗口
func (c *Crawler) NewRemote()(selenium.WebDriver,error){
    w_b1, err := selenium.NewRemote(c.Caps, fmt.Sprintf("http://localhost:%d/wd/hub", c.Port))
    if err != nil {
        return nil,errors.New("connect to the webDriver faild,"+err.Error())
    }
    return w_b1,nil
}

//关闭驱动服务
func (c *Crawler) Shutdown(){
    _ = c.Service.Stop()
}

 

posted on 2020-07-06 17:37  jgbb  阅读(538)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3