文章目录
- Golang+chromedp+goquery 简单爬取动态数据
- Golang的安装
- 下载golang软件
- 解压golang
- 配置golang
- 重新导入配置
- chromedp框架的使用
- 实际的代码编写
- 开始编码
- 如下是拓展和解释上述代码的内容
- goquery第三方库的使用
- 开始编码
- 如下是关于goquery一些用法
- 如何将自己的程序部署到阿里云服务器上
- screen工具
Golang+chromedp+goquery 简单爬取动态数据
兵长:
golang天气预报每日一句Javascript动态数据golangGolang的安装
linux下载golang软件
https://studygolang.com/dlwindows,linux,machttps://docs.studygolang.com/doc/install解压golang
tar -C /usr/local -xzf go1.16.linux-amd64.tar.gz配置golang
PATHvim /etc/profileexport GOROOT=/usr/local/goexport PATH=$PATH:$GOROOT/bin重新导入配置
source /etc/profilechromedp框架的使用
chromedp框架githubgithub可以通过如下命令来进行下载
github.com/chromedp/chromedp实际的代码编写
每日一句http://news.iciba.com/开始编码
//获取网站上爬取的数据func GetHttpHtmlContent(url string, selector string, sel interface{}) (string, error) { options := []chromedp.ExecAllocatorOption{ chromedp.Flag("headless", true), // debug使用 chromedp.Flag("blink-settings", "imagesEnabled=false"), chromedp.UserAgent(`Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36`), } //初始化参数,先传一个空的数据 optiOns= append(chromedp.DefaultExecAllocatorOptions[:], options...) c, _ := chromedp.NewExecAllocator(context.Background(), options...) // create context chromeCtx, cancel := chromedp.NewContext(c, chromedp.WithLogf(log.Printf)) // 执行一个空task, 用提前创建Chrome实例 chromedp.Run(chromeCtx, make([]chromedp.Action, 0, 1)...) //创建一个上下文,超时时间为40s timeoutCtx, cancel := context.WithTimeout(chromeCtx, 40*time.Second) defer cancel() var htmlContent string err := chromedp.Run(timeoutCtx, chromedp.Navigate(url), chromedp.WaitVisible(selector), chromedp.OuterHTML(sel, &htmlContent, chromedp.ByJSPath), ) if err != nil { logger.Info("Run err : %v\n", err) return "", err } //log.Println(htmlContent) return htmlContent, nil}GetHttpHtmlContentjsurlselectorhtml择器F12点击左上角的鼠标再点击我们需要爬取的数据就可以看到实际的html源码Javascriptitem-bottomCopyCopy selectorbody > div.screen > div.banner > div.swiper-container-place > div > div.swiper-slide.swiper-slide-0.swiper-slide-visible.swiper-slide-active > a.item.item-big > div.item-bottomGetHttpHtmlContentselectordocument.querySelector("body") //从body里面获取数据html如下是拓展和解释上述代码的内容
chromedp.Flagchromedp无头模式 headlesstruechromedpchromedp.Flag("blink-settings", "imagesEnabled=false")htmlContenthtmlchromedp.ByJSPathchromedp.ByNodeIDchromedp.BySearchchromedp.ByIDchromedp.ByQueryAllchromedp.ByQuerychromedp.ByFuncchromedp兵长html每日一句goqueryhtmlgoquery第三方库的使用
我之前写过一个小接口,可以给你看看,兵长
goquerygithubgo get github.com/PuerkitoBio/goquery开始编码
//得到具体的数据func GetSpecialData(htmlContent string, selector string) (string, error) { dom, err := goquery.NewDocumentFromReader(strings.NewReader(htmlContent)) if err != nil { logger.Error(err) return "", err } var str string dom.Find(selector).Each(func(i int, selection *goquery.Selection) { str = selection.Text() }) return str, nil}htmlContentchromedphtmlhtml.chineseGetSpecialData(htmlContent, ".chinese")当你是在为梦想成真努力时,就不会有压力。如下是关于goquery一些用法
主要是关于html各种选择器的写法使用方式,下面简单介绍一下种类,如果需要详细了解,可以给我留言哟
- 基于HTML Element 元素的选择器
- ID 选择器
- Class选择器
- 属性选择器
- parent > child选择器
- element + next 相邻选择器
- element~next 兄弟选择器
胖sir:兵长,我说的这些还算清楚吧,你知道怎么用了吗?
兵长:明~明白了,我还要多加练习,多多爬取一下不同的站数据看看效果
胖sir:诶,兵长刚才你说你想将数据处理完毕后,发邮件给你自己吗?
兵长:对呀,诶呀,这又是个问题。我不知道把程序放在那里呢,放在我自己电脑里面的话,我电脑每天是要关机的,我休息了,我的电脑也要跟着我休息,诶,咋办呀
胖sir:好办,这个我可以推荐你用一下 阿里云服务器
如何将自己的程序部署到阿里云服务器上
自己买一个云服务器就可以很方便的将自己的监控程序或者需要一直运行的程序放在上面,这就可以7*24小时不间断的跑了,我最近感受了一下,确实好用。具体的阿里云购买方式可以尝试扫描下面的二维码或者点击链接进行购买,亲测真的好用,如何使用和简单配置,可以给我留言获取资料。
当然,需要上述整个小案例源码的,也可以给我留言哦,让我们一起实践我们的每一个想法,一步一步往上爬。
胖sir:兵长,我需要提醒一点哦,阿里云服务器会自动把你的运行程序关闭掉了的
兵长:啊?那么你还让我买服务器,你这不是坑我吗
胖sir:别急,我推荐的肯定是好东西啦,还附带解决方案哟
screen工具
screen工具可以帮助我们将可执行程序部署到阿里云服务器上面,且能够一直不间断的运行
原理:
screen是在服务器上单独开一个进程,让他专门来执行后台任务。
具体操作:
//ubuntu安装sudo apt-get install screen//centosyum install screenscreen -S name例如:screen -S sshscreen -lsscreen -r -d 自己的id如:screen -r -d 5295screen -S 进程名 -X quit大家如果有需要,可以通过此链接购买阿里云服务器,目前萌新有优惠,亲测很可,别问我是谁,我是小魔童哪吒。
https://www.aliyun.com/activity?taskCode=messenger2101&recordId=337686&usercode=&share_source=copy_link