环球快看:go colly 爬虫实现示例
(资料图片)
正文
贡献某CC,go源码爬虫一个,基于colly,效果是根据输入的浏览器cookie及excel必要行列号,从excel中读取公司名称,查询公司法人及电话号码。并写回到excel中指定行。
package main
import (
"bufio"
"fmt"
"github.com/gocolly/colly/debug"
"github.com/gocolly/colly/extensions"
"github.com/xuri/excelize/v2"
"net/url"
"os"
"runtime"
"strconv"
"time"
)
import "github.com/gocolly/colly"
var (
cookies string
tempUrl string
tempGongSiName string
tempI int
)
func main() {
//要处理的文件全名
var fileName string
//列的名称
var namelie string
//开始行号
var startNum int
//结束行号
var endNum int
var personLie string
var phoneLie string
fmt.Println("请输入浏览器cookies 在浏览器 开发者模式F12,情况下找到控制台(consol) 输入(注意,Cookie中如果有 HttpOnly的需要在开发工具中将HttpOnly取消掉,然后再执行后面命令):document.cookie 即可,然后复制出来! 右击,复制字符串内容")
//fmt.Scan(&cookies) //此行遇到空格会 默认输入完毕了,所以不能用它
reader := bufio.NewReader(os.Stdin)
res, _, err := reader.ReadLine()
if nil == err {
cookies=string(res)
}else{
fmt.Println("读取cookie错误 error:", err)
return
}
//fmt.Println("输入的cookie是:"+cookies)
fmt.Println("请输入文件全路径:(字符串类型)")
fmt.Scan(&fileName)
fmt.Println("请输入Excel要查询公司名称列的字母(字母大写):")
fmt.Scan(&namelie)
fmt.Println("请输入Excel指定列的第一个行号(数字类型):")
fmt.Scan(&startNum)
fmt.Println("请输入Excel指定列的最后一个行号(数字类型):")
fmt.Scan(&endNum)
fmt.Println("请输入Excel联系人的所在列的字母(字母大写):")
fmt.Scan(&personLie)
fmt.Println("请输入Excel联系电话所在列的字母(字母大写):")
fmt.Scan(&phoneLie)
//输出所有输入的信息,验证正确
//fmt.Println(fileName,namelie,startNum,endNum,personLie,phoneLie)
f, err := excelize.OpenFile(fileName)
if err!=nil {
fmt.Println(err)
return
}
c:=initCollector(f,personLie,phoneLie)
//上面打开的工作簿记得关闭吆。
defer func() {
// 关闭工作簿
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
for i:=startNum;i<=endNum;i++{
// 获取工作表中指定单元格的值
cell, err := f.GetCellValue("Sheet1", namelie+strconv.Itoa(i))
if err != nil {
fmt.Println("读取第"+strconv.Itoa(i)+"行出错!")
return
}else{
fmt.Println("开始抓取:"+cell+" 数据")
tempGongSiName = cell
tempI = i
visitUrl(c)
time.Sleep(1*time.Second)
}
}
fmt.Println("-------------亲爱的,程序成功执行完毕。--------我要喝咖啡,我要吃肉肉------!")
}
///初始化收集器
func initCollector(f *excelize.File,personLie string,phoneLie string,) *colly.Collector {
c := colly.NewCollector(colly.MaxDepth(1), colly.Debugger(&debug.LogDebugger{}))
extensions.RandomUserAgent(c) // 使用随机的UserAgent,最好能使用代理。这样就不容易被ban
c.SetProxy("socks5://127.0.0.1:7890")
c.OnError(func(response *colly.Response, err error) {
fmt.Println("---->onError --------爬取出错了"+err.Error())
runtime.Goexit()
})
c.OnResponse(func(response *colly.Response) {
fmt.Println("---->onResponse")
})
c.OnXML("table", func(element *colly.XMLElement) {
fmt.Println("---->onXML")
})
c.OnRequest(func(r *colly.Request) {
r.Headers.Set("Cookie",cookies)
r.Headers.Add("referer", tempUrl)
r.Headers.Add("sec-fetch-mode", "cors")
r.Headers.Add("sec-fetch-site", "same-origin")
r.Headers.Add("accept", "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01")
r.Headers.Add("accept-encoding", "gzip, deflate, br")
r.Headers.Add("accept-language", "en,zh-CN;q=0.9,zh;q=0.8")
r.Headers.Add("X-Requested-With", "XMLHttpRequest")
})
c.OnHTML("tr:first-child", func(e *colly.HTMLElement) {//拿到查询的第一条数据。
fmt.Println("---->onHtml---获取成功!")
//拿到第一条的公司主要信息。
//fmt.Println("---->"+e.DOM.Find(".relate-info").Text())
sellectEle := e.DOM.Find(".relate-info")
//最终查询出来的人
name:=sellectEle.Find("div:nth-child(1)").Find("div>span").First().Find("a").Text()
//最终查询出来的电话
phone:=sellectEle.Find("div:nth-child(2)").Find("div>span").First().Find("span>span").Find(":nth-child(2)").Text()
//fmt.Println("--->>>"+name)
//fmt.Println("--->>>"+phone)
f.SetCellValue("Sheet1", personLie+strconv.Itoa(tempI), name)
fmt.Println("将"+tempGongSiName+"人名 ("+name+") 写入 "+personLie+strconv.Itoa(tempI))
f.SetCellValue("Sheet1", phoneLie+strconv.Itoa(tempI), phone)
fmt.Println("将"+tempGongSiName+"电话 ("+phone+") 写入 "+phoneLie+strconv.Itoa(tempI))
f.Save()
})
c.OnScraped(func(response *colly.Response) {
fmt.Println("onScraped")
})
return c
}
//访问给定名称
func visitUrl(c *colly.Collector){
tempUrl:="https://www.xxx.com/web/search?key="+url.QueryEscape(tempGongSiName)
c.Visit(tempUrl)
}以上就是go colly 爬虫实现示例的详细内容,更多关于go colly 爬虫的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?

