请问老师 func detemineEncoding 对有的网页会报EOF错,不是通用方法
来源:15-1 获得初始页面内容

mbdbk
2020-05-17
视频中真爱网,现在不可以爬了,不登录很多信息都看不到。
code 如下:
package main
import (
“bufio”
“fmt”
“io”
“io/ioutil”
“net/http”
"golang.org/x/text/transform"
"golang.org/x/net/html/charset"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/unicode"
)
func main() {
//url := "http://www.10jqka.com.cn/"
url := "http://q.10jqka.com.cn/"
resp, err := http.Get(url)
if err != nil {
fmt.Println(“http.Get error:”, err)
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
fmt.Println("Error: status code", resp.Status)
return
}
e := determineEncoding(resp.Body)
utf8Reader := transform.NewReader(resp.Body, e.NewDecoder())
//utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder())
//all, err := ioutil.ReadAll(resp.Body)
all, err := ioutil.ReadAll(utf8Reader)
if err != nil {
fmt.Println("ioutil.ReadAll error:", err)
return
}
fmt.Printf("%s\n", all)
}
func determineEncoding(r io.Reader) encoding.Encoding {
bytes, err := bufio.NewReader®.Peek(1024)
if err != nil {
fmt.Printf(“func detemineEncoding error:%v”, err)
return unicode.UTF8
}
e, _, _ := charset.DetermineEncoding(bytes, “”)
return e
}
写回答
1回答
-
ccmouse
2020-05-17
的确有可能有这个问题。如果你不用zhenai.com的话,应该不需要使用我写的这个determineEncoding函数。是zhenai.com返回的encoding比较奇怪才需要这样处理一下。
00
相似问题