【Go语言实战】爬虫GBK编码问题处理

上一篇文章,分享了如何将字符串GBK,UTF8编码互转,确实很实用。

但是我在爬取了一篇GBK编码的文章,并将它转换成UTF8编码字符串之后,html中的 都变成了,效果非常不理想,那怎么办呢?

仍然是面向google编程(百度已经满足不了我的需求了),无意中看到了golang.org/x/html包下面有个charset.NewReader(r io.Reader, contentType string)方法,它可以将reader的内容转换成指定的编码。

// NewReader returns an io.Reader that converts the content of r to UTF-8.
// It calls DetermineEncoding to find out what r's encoding is.
func NewReader(r io.Reader, contentType string) (io.Reader, error) {
    preview := make([]byte, 1024)
    n, err := io.ReadFull(r, preview)
    switch {
    case err == io.ErrUnexpectedEOF:
        preview = preview[:n]
        r = bytes.NewReader(preview)
    case err != nil:
        return nil, err
    default:
        r = io.MultiReader(bytes.NewReader(preview), r)
    }

    if e, _, _ := DetermineEncoding(preview, contentType); e != encoding.Nop {
        r = transform.NewReader(r, e.NewDecoder())
    }
    return r, nil
}

这个方法解了我的燃眉之急,我将返回结果转换成utf8编码,并将爬取的内容存入文件中查看内容,一切都符合预期。

示例代码:

r, _ := charset.NewReader(resp.Body, "UTF-8")
dom, err := goquery.NewDocumentFromReader(r)
if err != nil {
    log.Errorln("New Dom error", err)
    return ""
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容