一.要点

爬虫被想太多,把他当做一个模拟别人的请求响应即可了,所有呢go写爬虫关键是写请求

二.get请求

package main

import (
"bytes"
"encoding/json"
"io"
"io/ioutil"
"net/http"
"time"
) func Get(url string) string {
client := &http.Client{Timeout: 5 * time.Second} // 超时时间:5秒 相当于我们爬虫中的timeout参数
resp, err := client.Get(url) //发起请求
//resp, err := http.NewRequest("GET", url) 也可以这样写 post同理 //增加header选项
resp.Header.Add("Cookie", "xxxxxx")
resp.Header.Add("User-Agent", "xxx")
resp.Header.Add("X-Requested-With", "xxxx")
//cookies就直接加在请求头中就好了 if err != nil { //请求返回的错误参数
panic(err)
}
defer resp.Body.Close() //请求成功对于请求提进行解析
var buffer [512]byte
result := bytes.NewBuffer(nil)
for {
n, err := resp.Body.Read(buffer[0:])
result.Write(buffer[0:n])
if err != nil && err == io.EOF {
break
} else if err != nil {
panic(err)
}
}
return result.String()
} func main(){
print(Get("http://www.baidu.com"))
}

三.post请求

//其他地方就省略咯
func Post(url string, data interface{}, contentType string) string {
client := &http.Client{Timeout: 5 * time.Second}
jsonStr, _ := json.Marshal(data)
resp, err := client.Post(url, contentType, bytes.NewBuffer(jsonStr))
if err != nil {
panic(err)
}
defer resp.Body.Close() result, _ := ioutil.ReadAll(resp.Body)
return string(result)
}

GO用内置包写爬虫的更多相关文章

  1. Golang语言系列-13-常用内置包

    常用内置包 net/http包 http请求和响应 http服务端 main.go文件 package main import ( "fmt" "io/ioutil&qu ...

  2. Go语言内置包之strconv

    文章引用自 Go语言内置包之strconv Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换. strconv包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下 ...

  3. Day 07 字符串内置方法和爬虫基础3

    目录 异常处理 LeetCode使用之两数之和(示例) 字符串内置方法 爬虫基础3 selenium基本使用 selenium模拟百度登录 selenium爬取京东商品信息 异常处理 try: pri ...

  4. python 基本数据类型以及内置方法

    一.数字类型 # 一.整型int # ======================================基本使用====================================== ...

  5. Python 的内置字符串方法(收藏专用)

    Python 的内置字符串方法(收藏专用) method 字符串 string python3.x  python 4.7k 次阅读  ·  读完需要 44 分钟 5 字符串处理是非常常用的技能,但 ...

  6. 数据库(十三):MySQL内置方法

    进击のpython ***** 数据库--MySQL内置方法 目录 数据库--MySQL内置方法 视图 增加 修改 删除 触发器 创建 使用 删除 存储过程 无参 有参 事务 代码实现 视图 视图是一 ...

  7. Oracle学习笔记十四 内置程序包

    扩展数据库的功能 为 PL/SQL 提供对 SQL 功能的访问 用户 SYS 拥有所有程序包 是公有同义词 可以由任何用户访问 一些内置程序包 程序包名称 说明 STANDARD和DBMS_STAND ...

  8. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  9. Day5 函数递归,匿名、内置行数,模块和包,开发规范

    一.递归与二分法 一.递归 1.递归调用的定义 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身 2.递归分为两类:直接与间接 #直接 def func(): print('from fu ...

随机推荐

  1. 深度长文整理-Redis进阶

    目录 一.基础 二.为什么Redis是单线程的? 三.为什么单线程这么快? 四.select.poll.epoll 五.Redis的事物 六.Redis的监控 七.Redis的配置文件 八.Redis ...

  2. Netty中的一些注意事项--底层基础

    转载自http://www.mamicode.com/info-detail-1215305.html 最近开发了一个纯异步的redis客户端,算是比较深入的使用了一把netty.在使用过程中一边优化 ...

  3. OpenCV计算机视觉学习(1)——图像基本操作(图像视频读取,ROI区域截取,常用cv函数解释)

    1,计算机眼中的图像 我们打开经典的 Lena图片,看看计算机是如何看待图片的: 我们点击图中的一个小格子,发现计算机会将其分为R,G,B三种通道.每个通道分别由一堆0~256之间的数字组成,那Ope ...

  4. Java多线程--创建和使用线程池

    使用线程池的目的 线程是稀缺资源,不能频繁的创建 解耦作用:线程的创建与执行完全分开,方便维护 将其放入一个池子中,可以给其他任务进行复用 优点 降低资源消耗,通过重复利用已创建的线程来降低线程创建和 ...

  5. linux学习(五)Linux 文件与目录管理

    一.Linux处理目录的常用命令 ls : 列出目录 cd :切换目录 pwd :显示目前的目录 mkdir :创建一个新的目录 rmdir :删除一个空的目录 cp : 复制文件或目录 rm : 移 ...

  6. Java Web学习(二)数据加密

    一.Tomcat 体系 首先通过一幅图来了解下tomcat的运行体系: Tomcat服务器的启动是基于一个server.xml文件的. 启动流程: 首先启动一个Server,Server里面就会启动S ...

  7. 什么是Python???

    1.python是一种解释型语言,这就是说python不用像C语言或者C的衍生语言那样在执行前进行编译. 2.Python是一种动态类型的语言,就是python支持x = 111或者x="1 ...

  8. node核心模块-vm

    vm vm是node的一个核心模块,核心功能官方文档介绍是: The vm module provides APIs for compiling and running code within V8 ...

  9. Kafka控制器事件处理全流程分析

    前言 大家好,我是 yes. 这是Kafka源码分析第四篇文章,今天来说说 Kafka控制器,即 Kafka Controller. 源码类的文章在手机上看其实效果很差,这篇文章我分为两部分,第一部分 ...

  10. djano jwt 的使用

    1.5 JWT:使用djangorestframework-jwt模块进行用户身份验证    安装: pip install djangorestframework-jwt    添加应用:pytho ...