爬虫爬取的html的编码是gbk,【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 ""

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值