首页 > 其他分享 >基于Go1.19的站点模板爬虫

基于Go1.19的站点模板爬虫

时间:2024-07-05 09:56:52浏览次数:17  
标签:Go1.19 抓取 爬虫 HTML 模板 Go main colly

要基于Go 1.19创建一个站点模板爬虫,你可以使用Go语言的标准库和一些第三方库(如collygoquery)来实现网页抓取和解析。以下是一个简单的示例,展示了如何使用colly库编写一个站点模板爬虫:

  1. 安装Colly库

    首先,确保你已经安装了Go,并设置好了Go的工作环境。然后使用以下命令安装colly库:

    go get -u github.com/gocolly/colly/v2
    
  2. 编写爬虫代码

    创建一个新的Go文件,例如main.go,并编写如下代码:

    package main
    
    import (
        "fmt"
        "log"
        "github.com/gocolly/colly/v2"
    )
    
    func main() {
        // 初始化Colly收集器
        c := colly.NewCollector(
            // 在抓取过程中可以跟踪的请求
            colly.AllowedDomains("example.com"),
        )
    
        // 定义在访问每个HTML元素时的回调函数
        c.OnHTML("a[href]", func(e *colly.HTMLElement) {
            link := e.Attr("href")
            fmt.Println("Link found:", link)
            // 访问链接
            e.Request.Visit(link)
        })
    
        // 定义在访问每个请求时的回调函数
        c.OnRequest(func(r *colly.Request) {
            fmt.Println("Visiting", r.URL)
        })
    
        // 启动爬虫,访问初始页面
        err := c.Visit("http://example.com")
        if err != nil {
            log.Fatal(err)
        }
    }
    
  3. 运行爬虫

    在终端中运行以下命令来编译和运行你的爬虫:

    go run main.go
    

这个简单的示例展示了如何使用Colly库从一个网站中抓取所有链接,并访问这些链接。你可以根据需要进一步扩展和修改爬虫以处理更复杂的任务,例如解析特定的HTML元素、处理分页、保存数据等。

注意事项

  1. 合法性和礼貌:在抓取网站时,务必遵守网站的robots.txt规则,并确保你的抓取行为不会对目标网站造成过大的压力或干扰。

  2. 错误处理:在实际应用中,添加适当的错误处理和重试机制是很重要的。

  3. 数据存储:你可能需要将抓取的数据保存到数据库或文件中,这取决于你的具体需求。

爬取上证指数的案例

爬取上证指数数据的一个基本方法是使用Go语言和Colly库来抓取网页并提取所需的数据。以下是一个示例,展示了如何使用Colly库从一个金融网站抓取上证指数的数据。

  1. 安装Colly库

    首先,确保你已经安装了Go,并设置好了Go的工作环境。然后使用以下命令安装colly库:

    go get -u github.com/gocolly/colly/v2
    
  2. 编写爬虫代码

    创建一个新的Go文件,例如main.go,并编写如下代码:

    package main
    
    import (
        "fmt"
        "log"
        "github.com/gocolly/colly/v2"
    )
    
    func main() {
        // 初始化Colly收集器
        c := colly.NewCollector()
    
        // 在HTML解析时指定选择器
        c.OnHTML("div[id='shanghai-index']", func(e *colly.HTMLElement) {
            indexValue := e.Text
            fmt.Println("上证指数:", indexValue)
        })
    
        // 在每次请求时打印访问的URL
        c.OnRequest(func(r *colly.Request) {
            fmt.Println("Visiting", r.URL)
        })
    
        // 启动爬虫,访问目标页面
        err := c.Visit("https://example.com/shanghai-index")
        if err != nil {
            log.Fatal(err)
        }
    }
    

在上面的代码中:

  • c.OnHTML 用于定义当匹配到指定的HTML元素时执行的操作。"div[id='shanghai-index']" 是一个示例选择器,你需要根据实际网页的HTML结构来调整它。
  • e.Text 提取该元素的文本内容。
  1. 运行爬虫

    在终端中运行以下命令来编译和运行你的爬虫:

    go run main.go
    

具体到上证指数的实际网站

实际情况中,你需要找到一个提供上证指数数据的页面。例如,上证指数数据可以从新浪财经或其他金融数据网站获取。以下是一个稍微复杂的例子,假设我们从新浪财经获取上证指数:

  1. 确定数据源和选择器

    访问新浪财经上证指数页面,并使用浏览器的开发者工具找到上证指数的HTML结构和选择器。例如,假设上证指数在页面中的选择器是span[id='price']

  2. 更新爬虫代码

    package main
    
    import (
        "fmt"
        "log"
        "github.com/gocolly/colly/v2"
    )
    
    func main() {
        // 初始化Colly收集器
        c := colly.NewCollector()
    
        // 在HTML解析时指定选择器
        c.OnHTML("span[id='price']", func(e *colly.HTMLElement) {
            indexValue := e.Text
            fmt.Println("上证指数:", indexValue)
        })
    
        // 在每次请求时打印访问的URL
        c.OnRequest(func(r *colly.Request) {
            fmt.Println("Visiting", r.URL)
        })
    
        // 启动爬虫,访问目标页面
        err := c.Visit("http://finance.sina.com.cn/realstock/company/sh000001/nc.shtml")
        if err != nil {
            log.Fatal(err)
        }
    }
    

注意事项

  1. 选择器:确保你使用正确的HTML选择器来提取数据。使用浏览器的开发者工具(F12)来查看页面的HTML结构。

  2. 反爬虫措施:一些网站可能有反爬虫措施,如IP封锁或验证码。你可能需要使用代理IP或其他技术来应对这些措施。

  3. 合法性和礼貌:在抓取网站时,务必遵守网站的robots.txt规则,并确保你的抓取行为不会对目标网站造成过大的压力或干扰。

如果你有任何具体问题或需要进一步的帮助,请告诉我!

标签:Go1.19,抓取,爬虫,HTML,模板,Go,main,colly
From: https://blog.csdn.net/ethnicitybeta/article/details/140199987

相关文章

  • 1-认识网络爬虫
    1.什么是网络爬虫​网络爬虫(WebCrawler)又称网络蜘蛛、网络机器人,它是一种按照一定规则,自动浏览万维网的程序或脚本。通俗地讲,网络爬虫就是一个模拟真人浏览万维网行为的程序,这个程序可以代替真人自动请求万维网,并接收从万维网返回的数据。与真人浏览万维网相比,网络爬虫能......
  • python爬虫爬取图片初级
    声明本人也是编程菜鸟用的是pycharm,全是我自已的理解若有错误的地方欢迎指出1.首先导入包importrequestsimportreimporttimerequests网页请求re正侧表达式time防止过快爬取导致网站崩溃2.爬虫基础代码获取网页请求这里我爬的是彼岸图:https://pic.netbian.com......
  • c++类模板及应用
    文章目录为什么要有函数模板一般实现举例类模板举例继承中类模板的使用特殊情况友元函数模板类和静态成员类模板实践为什么要有函数模板项目需求:实现多个函数用来返回两个数的最大值,要求能支持char类型、int类型、double一般实现举例类模板举例继承中类模......
  • 【网络爬虫程序】
    importurllib.requestimporttimeimportrandomimportosdeffetch_webpage(url):  #设置User-Agent  user_agent='Sogouwebspider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)'     #创建请求对象,并设置User-Agent  reque......
  • 【python爬虫实战】进阶天气虫虫(过程复盘 & 心得分享)
    程序设计过程里的一些心得:0.规模较大的程序,往往都是以更小的功能块搭建起来的。如此,为了提升总体程序的构建效率,笔者发现分“两步走”会比较高效:    A.遇到需要反复调试的功能块,可先在另一程序中逐一单独测试某一功能块(这有助于突出模块本身的细节问题)   ......
  • python爬虫3-多进程多线程协程
    多进程和多线程frommultiprocessingimportProcessimportthreadingdefprocess_worker():foriinrange(200):print(f"Processworker{i}")defthread_worker():foriinrange(200):print(f"Threadworker{i}")if__......
  • 工具篇:01用python的request爬虫
    工具篇:01用python爬虫爬虫爬虫的概念尝试用python爬虫爬虫爬虫的概念爬虫我认为就是用代码获取数据经过我的上网查找得出结论:爬虫是一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息。尝试用python爬虫用两种爬虫方式第一种是request,第二种scra......
  • python爬虫1-requests库
    requests库requests提供发送网络请求和处理响应的方法安装pipinstallrequestsGET请求importrequestsurl='https://www.baidu.com/'#urlparams={'key1':'value1','key2':'value2'}#参数#发送get请求......
  • python爬虫2-HTML文本处理
    HTML文本处理re模式匹配正则表达式是一种强大的字符串匹配和处理工具,允许通过指定的模式来查找、替换和验证字符串。函数编译正则表达式re.compile(pattern,flags=0):将字符串形式的正则表达式编译为一个正则对象,用于后续的匹配操作。匹配操作re.match(pattern,str......
  • P5854 【模板】笛卡尔树
    原题链接题解笛卡尔树的定义如下:任意一颗子树都代表一段连续的区间,且子树的根节点是该区间的最大值,根的左边的元素下标均比根小(二叉搜索树性质),子节点均比父节点大(堆的性质)我们讲如何实现的设即将要插入的元素为\(a_i\)栈内的元素为前\(i-1\)个元素构成的笛卡尔树从根一直......