4-golang爬虫下载的代码

这篇具有很好参考价值的文章主要介绍了4-golang爬虫下载的代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

golang爬虫下载的代码:

下载程序的借鉴内容:

这个是关于gbk,utf8等相互转换的包

github.com/axgle/mahonia"

 一、标准下载代码

1.1标准1

package downloader

import (
	"log"
	"net/http"
	"io"

	"github.com/axgle/mahonia"

	"github.com/go-crawler/car-prices/fake"
)

func Get(url string) io.Reader {
	client := &http.Client{}
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		log.Printf("http.NewRequest err: %v", err)
	}

	req.Header.Add("User-Agent", fake.GetUserAgent())
	req.Header.Add("Referer", "https://car.autohome.com.cn")

	resp, err := client.Do(req)
	if err != nil {
		log.Printf("client.Do err: %v", err)
	}

	mah := mahonia.NewDecoder("gbk")
	return mah.NewReader(resp.Body)
}

 

1.2标准2,chatgpt生成的

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	//url := "https://example.com"
	url := "https://baidu.com"
	headers := make(map[string]string)
	headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
	//headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
	//headers["Accept-Encoding"] = "gzip, deflate, sdch"
	//headers["Accept-Language"] = "en-US,en;q=0.8"
	//headers["Cache-Control"] = "max-age=0"
	//headers["Connection"] = "keep-alive"

	client := &http.Client{}
	request, err := http.NewRequest("GET", url, nil)
	if err != nil {
		fmt.Println("Failed to create request:", err)
		return
	}

	// 设置请求头部信息
	for key, value := range headers {
		request.Header.Set(key, value)
	}

	response, err := client.Do(request)
	if err != nil {
		fmt.Println("Failed to send request:", err)
		return
	}
	defer response.Body.Close()

	// 读取响应内容
	body, err := ioutil.ReadAll(response.Body)
	if err != nil {
		fmt.Println("Failed to read response:", err)
		return
	}

	// 打印响应内容
	fmt.Println(string(body))
}

二、补充内容

客户端在发送请求时,可以通过设定请求头中的多项参数规范请求的特性,例如字符编码集、语言等等,详细信息大家可以参照:这里 下面简单列举几个。


Accept::浏览器可接受的数据类型;
Accept-Charset:浏览器可接受的字符编码集;
Accept-Encoding:浏览器可接受的编码方法;
Accept-Language:浏览器可接受的语言;
Connection:是否为持久连接,默认长连接keep-alive,由于网页数据很多,所以浏览器可能是连续多次请求服务器数据的,此时多次访问只有首次完成tcp3次握手,减少消耗;而tcp中的keep-alive是tcp连接的有效时长,一般比http的keep-alive的时间长。
Cookie:Cookie值;
Content-Lenght:请求内容的长度,过长和果断将导致请求内容截断;如果不知道可以不设置,交由底层完成;
Host:访问的服务器地址;
User-Agent:用户信息。

 2.1经常添加的上述头文件内容代码,可以根据实际情况进行添加;

 client := &http.Client{}
    url := "http://www.baidu.com"
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }

    req.Header.Add("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    req.Header.Add("Accept-Charset","utf-8")
    //req.Header.Add("Accept-Encoding","br, gzip, deflate")
    req.Header.Add("Accept-Language","zh-cn")
    req.Header.Add("Connection","keep-alive")
    //req.Header.Add("Cookie","xxxxxxxxxxxxxxx")
    //req.Header.Add("Content-Lenght",xxx)
    req.Header.Add("Host","www.baidu.com")
    req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36")
    rep, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    data, err := ioutil.ReadAll(rep.Body)
    rep.Body.Close()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("%s", data)

2.2post方法向服务器提交

func main() {
    client := &http.Client{}
    req_data := `{"name":"ali", "age":"18"}`
    url := "http://www.baidu.com"
    req, err := http.NewRequest("POST", url,  strings.NewReader(req_data))
    if err != nil {
        log.Fatal(err)
    }
    //Content-Type很重要,下文解释
    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    //req.Header.Set("Content-Type", "application/json")
    //req.Header.Set("Content-Type", "multipart/form-data")

    rep, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    data, err := ioutil.ReadAll(rep.Body)
    rep.Body.Close()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("%s", data)
}


上面的代码意在向百度提交name和age数据,由于百度服务器并不识别name和age,所以无法返回正确的数据,但流程上是正确的。其中有必要说一下Content-Type,它是用于规定提交数据的类型,常见的有application/x-www-form-urlencoded、application/form-data和application/json等,下面分别说明一下:

application/x-www-form-urlencoded:最常见的类型之一,表示将数据转化为键值对后提交,例如name=ali&age=18.但是如果有本身数据中有&字符就可能造成歧义,例如二进制文件等。

application/form-data:表示以表格数据上报,即将多组数据以一串复杂的boundary数据分隔,而非&符;因此这种数据类型可以用于上传文件或有&符的数据。

application/json:表示将提交的数据转化成json格式。
 文章来源地址https://www.toymoban.com/news/detail-626807.html

2.3小示例 

package main

import (
	"io/ioutil"
	"log"
	"net/http"
	"sync"
)

var wc sync.WaitGroup

func HelloClient(client *http.Client, url string){
	defer wc.Done()
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		log.Fatal(err)
	}
	rep, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	data, err := ioutil.ReadAll(rep.Body)
	rep.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%s", data)
}
func main() {
	client := &http.Client{}
	url := "http://127.0.0.1:8000"
	wc.Add(10)
	for i := 0; i < 10; i++{
		go HelloClient(client, url)
	}
	wc.Wait()
}

到了这里,关于4-golang爬虫下载的代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【超简版,代码可用!】【0基础Python爬虫入门——下载歌曲/视频】

    科普: get:公开数据 post:加密 ,个人信息 科普: 爬哪个网址? 怎么找视频/音频网址? 都是指URL,并非最上方的地址 把URL复制即可 如下操作: 解释:【看不懂没关系!请看下面的代码!可以直接套用】 res=requests.get(url) # 发送请求 print(res.content) # 获取二进制数据 wb 写入

    2024年01月24日
    浏览(42)
  • 示例代码:使用golang进行flink开发

    以下是一个使用 Golang 进行 Flink 开发的简单示例代码: 以上示例代码使用 Flink 的 REST API 连接到 Flink 作业集群,并定义了一个输入数据流和一个输出数据流。然后,使用 Map 操作对输入数据进行处理,并将处理后的数据写入输出数据流。最后,执行作业并等待作业结束。 请注

    2024年02月12日
    浏览(35)
  • 【Golang】go编程语言适合哪些项目开发?

    前言 在当今数字化时代,软件开发已成为各行各业的核心需求之一。 而选择适合的编程语言对于项目的成功开发至关重要。 本文将重点探讨Go编程语言适合哪些项目开发,以帮助读者在选择合适的编程语言时做出明智的决策。 Go 编程语言适合哪些项目开发? Go是由Google开发

    2024年02月04日
    浏览(60)
  • R语言如何写一个爬虫代码模版

    R语言爬虫是利用R语言中的网络爬虫包,如XML、RCurl、rvest等,批量自动将网页的内容抓取下来。在进行R语言爬虫之前,需要了解HTML、XML、JSON等网页语言,因为正是通过这些语言我们才能在网页中提取数据。 在爬虫过程中,需要使用不同的函数来实现不同的功能,例如使用

    2024年02月06日
    浏览(34)
  • 【华为OD机试真题 Golang语言】68、矩阵扩散 | 机试真题+思路参考+代码分析

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Golang语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习 🎃题目描述 存在一个m*n的二维数组,其成员取值范围为0或

    2024年02月03日
    浏览(31)
  • 【Golang】VsCode下开发Go语言的环境配置(超详细图文详解)

    📓推荐网站(不断完善中):个人博客 📌个人主页:个人主页 👉相关专栏:CSDN专栏、个人专栏 🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚 ​ 话说在前,Go语言的编码方式是 UTF-8 ,理论上你直接使用文本进行编辑也是可以的,当然为了提升我们的开发效率我们还是需

    2024年02月07日
    浏览(70)
  • R语言爬虫代码模版:技术原理与实践应用

    目录 一、爬虫技术原理 二、R语言爬虫代码模板 三、实践应用与拓展 四、注意事项 总结 随着互联网的发展,网络爬虫已经成为获取网络数据的重要手段。R语言作为一门强大的数据分析工具,结合爬虫技术,可以让我们轻松地获取并分析网络数据。本文将详细介绍如何使用

    2024年02月05日
    浏览(32)
  • Go语言用Resty库编写的音频爬虫代码

    目录 一、Go语言与Resty库简介 二、音频爬虫的实现 1、确定抓取目标 2、使用Resty发送HTTP请求 3、解析响应数据 4、下载音频文件 5、并发下载音频文件 三、注意事项 总结 随着互联网的飞速发展,网络爬虫逐渐成为数据获取和分析的重要工具。在音频领域,通过爬虫技术,我们

    2024年02月08日
    浏览(28)
  • 【爬虫开发】爬虫从0到1全知识md笔记第1篇:爬虫概述【附代码文档】

    爬虫开发从0到1全知识教程完整教程(附代码资料)主要内容讲述:爬虫概述。selenium的其它使用方法。Selenium课程概要。常见的反爬手段和解决思路。验证码处理。chrome浏览器使用方法介绍。JS的解析。Mongodb的介绍和安装,小结。mongodb的简单使用,小结。Mongodb的的增删改查,小

    2024年03月14日
    浏览(29)
  • 解锁清晰代码-每位开发者的20个架构技巧

        清晰架构 原则对于任何希望创建健壮、可维护和可扩展软件的软件开发者来说都至关重要。理解并实施这些概念可以显著提升你的编程技能。以下是对20个基本架构洞见的深入探讨: 依赖规则: 清晰架构的核心是依赖规则。它规定源代码的依赖关系应始终指向内部。这

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包