zoukankan      html  css  js  c++  java
  • GO用内置包写爬虫

    一.要点

    爬虫被想太多,把他当做一个模拟别人的请求响应即可了,所有呢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)
    }
    

  • 相关阅读:
    完美正方形-深度遍历
    CGCDSSQ Codeforces 475D
    [国家集训队]happiness
    点分治学习笔记
    [POI2008]PLA-Postering
    [20200801NOIP提高组模拟T2]电话线铺设
    [20200801NOIP提高组模拟T3]老司机
    [HNOI2001]产品加工
    分层图最短路[学习笔记]
    次芝麻
  • 原文地址:https://www.cnblogs.com/pythonywy/p/13525693.html
Copyright © 2011-2022 走看看