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)
    }
    

  • 相关阅读:
    PAT顶级 1002. Business (35)
    Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
    Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market
    主席树模板poj 2104
    Java 集合相关
    扁平疣病治疗
    一些网址
    在ubuntu14.04设置静态ip
    在Ubuntu14.04下安装vsftp服务器
    移植SDL运行库到Tiny6410 上
  • 原文地址:https://www.cnblogs.com/pythonywy/p/13525693.html
Copyright © 2011-2022 走看看