我们来用go语言爬取“珍爱网”用户信息。

首先分析到请求url为:

http://www.zhenai.com/zhenghun

接下来用go请求该url,代码如下:

package mainimport ("fmt""io/ioutil""net/http"
)func main() {//返送请求获取返回结果resp, err := http.Get("http://www.zhenai.com/zhenghun")if err != nil {panic(fmt.Errorf("Error: http Get, err is %v\n", err))}//关闭response bodydefer resp.Body.Close()if resp.StatusCode != http.StatusOK {fmt.Println("Error: statuscode is ", resp.StatusCode)return}body, err := ioutil.ReadAll(resp.Body)if err != nil {fmt.Println("Error read body, error is ", err)}//打印返回值fmt.Println("body is ", string(body))
}

运行后会发现返回体里有很多乱码:

在返回体里可以找到 即编码为gbk,而go默认编码为utf-8,所以就会出现乱码。接下来用第三方库将其编码格式转为utf-8。

由于访问golang.org/x/text需要梯子,不然报错:

所以在github上下载:

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/text.git

然后将gbk编码转换为utf-8,需要修改代码如下:

utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder())
body, err := ioutil.ReadAll(utf8Reader)

考虑到通用性,返回的编码格式不一定是gbk,所以需要对实际编码做判断,然后将判断结果转为utf-8,需要用到第三方库golang.org/x/net/html,同样的在github上下载:

mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/net

那么代码就变成这样:

package mainimport ("fmt""io/ioutil""net/http""golang.org/x/text/transform"//"golang.org/x/text/encoding/simplifiedchinese""io""golang.org/x/text/encoding""bufio""golang.org/x/net/html/charset"
)func main() {//返送请求获取返回结果resp, err := http.Get("http://www.zhenai.com/zhenghun")if err != nil {panic(fmt.Errorf("Error: http Get, err is %v\n", err))}//关闭response bodydefer resp.Body.Close()if resp.StatusCode != http.StatusOK {fmt.Println("Error: statuscode is ", resp.StatusCode)return}//utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder())utf8Reader := transform.NewReader(resp.Body, determinEncoding(resp.Body).NewDecoder())body, err := ioutil.ReadAll(utf8Reader)if err != nil {fmt.Println("Error read body, error is ", err)}//打印返回值fmt.Println("body is ", string(body))
}func determinEncoding(r io.Reader) encoding.Encoding {//这里的r读取完得保证resp.Body还可读body, err := bufio.NewReader(r).Peek(1024)if err != nil {fmt.Println("Error: peek 1024 byte of body err is ", err)}//这里简化,不取是否确认e, _, _ := charset.DetermineEncoding(body, "")return e
}

运行后就看不到乱码了:

今天先爬到这里,明天将提取返回体中的地址URL和城市,下一节见。


作者简洁

作者:小碗汤,一位热爱、认真写作的小伙,目前维护原创公众号:『我的小碗汤』,专注于写golang、docker、kubernetes等知识等提升硬实力的文章,期待你的关注。 转载说明:务必注明来源(注明:来源于公众号:我的小碗汤, 作者:小碗汤)

用go语言爬取珍爱网 | 第一回相关推荐

  1. 珍爱网html模板,爬取珍爱网后用户信息展示

    golang爬取珍爱网,爬到了3万多用户信息,并存到了elasticsearch中,如下图,查询到了3万多用户信息. image.png 先来看看最终效果: 42.gif 利用到了go语言的html模 ...

  2. selenium爬取珍爱网用户信息

    近期接到一个任务,爬取珍爱网上的用户信息,这个对单身的我来说瞬间提起了兴趣,这有可能是我脱单的开始,哼哼,不装逼了,先来看看怎么帮我脱单,嘻嘻嘻 import requests import time ...

  3. Go语言并发爬虫,爬取空姐网所有相册图片

    转载地址:Go语言中文网 说到爬虫,不得不提到我自己写的<Python网络爬虫requests.bs4爬取空姐网图片>,可以在我的csdn看到这篇文章.这个爬虫很简洁,使用requests ...

  4. Go语言进阶之路:并发爬虫,爬取空姐网所有相册图片

    上次聊到了<Go语言正则表达式>和<Go语言手撸一个LRU缓存>,这次利用正则表达式来编写一个并发爬虫. 说到爬虫,不得不提到前面写的<Python网络爬虫request ...

  5. python爬虫06 | 你的第一个爬虫,爬取当当网 Top 500 本五星好评书籍

    来啦,老弟 我们已经知道怎么使用 Requests 进行各种请求骚操作 也知道了对服务器返回的数据如何使用 正则表达式 来过滤我们想要的内容 ... 那么接下来 我们就使用 requests 和 re ...

  6. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试

    作者最近在研究复杂网络和知识图谱内容,准备爬取知网论文相关信息进行分析,包括标题.摘要.出版社.年份.下载数和被引用数.作者信息等.但是在爬取知网论文时,遇到问题如下:   1.爬取内容总为空,其原因 ...

  7. 爬取东方财富网股票行情数据和资讯

    爬取东方财富网股票行情数据和资讯 这个需求源于我的一个练手项目 本篇博客参考:https://zhuanlan.zhihu.com/p/50099084 该博客介绍的东西本博客不做论述 使用技术: 语 ...

  8. 用python爬取网站_「自如网」关于用python爬取自如网信息的价格问题(已解决) - seo实验室...

    自如网 ###这是一篇求助文,我能获取图片并变成字符串,但是无法获取位移量### 前两坛突发奇想想要爬取自如网的租房数据,本来以为能够请求+美丽+ re能全部搞定,没想到这个网站的反爬机制有点让我搞不 ...

  9. 爬取央视网节目单栏目信息!

    1.数据爬取 使用工具介绍 使用了python的自动化框架selenium进行动态爬取,Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在 ...

最新文章

  1. 985硕士毕业进京东,抱怨身边全是二本和大专生!没什么本事却整天高高在上!打交道太累了!...
  2. 每秒处理请求数和并发的关系
  3. 设计模式的理解: 职责链模式 (Chain of Responsibility)
  4. 使用kubectl查看Kubernetes集群里的node节点信息
  5. Hibernate 入门之轻松上手 选择自 chainshun 的 Blog
  6. teleport 组件的作用_承德专业做链轮组件哪家好
  7. 聊聊下一代监控:Prometheus
  8. 深入理解Tomcat系列之五:Context容器和Wrapper容器
  9. 带你彻底明白 Android Studio 打包混淆
  10. rx文件管理器window_像浏览器一样管理你的文件!
  11. Spark将数据写入Mysql
  12. Yii 2.0 权威指南 (6) 请求处理
  13. Atitit 代码要写的漂亮 老板要的是效率 冲怎么办突 目录 1. 代码要写高效,写漂亮,要考虑可扩展性和安全性,到了公司才发现老板要的是效率,不在乎你的代码写的是否高效,安全,是否具有可扩展性
  14. html psd设计图,根据PSD登陆页面设计稿切图制作HTML网页全过程
  15. 基于python人脸光照不均匀数据的制作
  16. html参考文献英文文献,写英文paper的参考文献格式How To Cite References - Chicago Style...
  17. 几何光学学习笔记(28)-6.3光照度和光出射度
  18. java打开客户端程序_Java客户端服务器应用程序 - 已在使用的地址:connect
  19. python123测试4四位玫瑰数_心理测试:4朵玫瑰,你最喜欢哪一朵?测测你这辈子会有多少情债...
  20. 操作系统春招面试复习之:操作系统概述

热门文章

  1. python保存dataframe数据到excel中,处理列宽数据格式等
  2. 陕西省语言文字计算机测试题,陕西省计算机辅助普通话水平测试评分细则(试行)...
  3. 通过hmmlearn学习使用HMM隐马尔科夫模型
  4. 人体轮廓特征—运动历史图—python实现
  5. 分析国内SNS现状 把握SNS用户心理
  6. C#中实现回车就切换控件的功能居然是它,真的让人好懵圈
  7. 浙江人事考试网计算机考试科目,『浙江事业单位』2020浙江省事业单位统考笔试科目及考试内容介绍...
  8. GBase 8c GDCA培训认证【环境准备、安装】
  9. 友谊长存-八年级作文
  10. 苹果自研M1笔记本芯片投入65亿开发自研基带。