请问老师 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比较奇怪才需要这样处理一下。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程