golang笔记14–go 语言爬虫实战项目介绍
1 介绍
本文继上文 golang笔记13–go语言 http 及其它标准库, 进一步了解 go 语言爬虫实战项目介绍,以及相应注意事项。
具体包括: 爬虫项目介绍、爬虫的法律风险、新爬虫的选择、总体算法 等内容。
2 开始实战项目
2.1 爬虫项目介绍
-
选择爬虫项目原因
1)有一定的复杂性;
2)可以灵活调整项目的复杂性;
3)需要平衡语言 | 爬虫之间的比重; -
网络爬虫分类
1)通用爬虫,例如百度、Google,它们会搜索互联网上的所有数据并保存下来,搜搜的时候直接从存储的备份里面找到目标内容,然后再访问实际网站内容;
2)聚焦爬虫,从互联网获取结构话数据,不保存所有数据,只根据一些需要提取需要的数据; -
go 语言常见爬虫库 | 框架
- henrylee2cn/pholcus
Pholcus(幽灵蛛)是一款纯 Go 语言编写的支持分布式的高并发爬虫软件,仅用于编程学习与研究。
它支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/kafka/csv/excel等);另外它还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。 - gocrawl
gocrawl是一个采用Go编写的微型并发Web爬虫。 - colly
Lightning Fast and Elegant Scraping Framework for Gophers.
Colly provides a clean interface to write any kind of crawler/scraper/spider.
With Colly you can easily extract structured data from websites, which can be used for a wide range of applications, like data mining, data processing or archiving. - hu17889/go_spider
go_spider 基于golang开发,是一个开放的垂直领域的爬虫框架,框架中将各个功能模块区分开,方便使用者重新实现子模块,进而构建自己垂直方方向的爬虫。
- henrylee2cn/pholcus
-
项目总体结构
1)选择目标网络资源,如珍爱网、爱卡网;
2)完成分布式爬虫模块;
3)存储到指定数据库中;
4)提供简单的前端展示;
本项目为了提高go语言熟练度,不使用现有爬虫库,全部手写;使用ElasticSearch 作为数据存储;使用go语言标准模板库实现 http 数据展示部分;
2.2 爬虫的法律风险
- robots 协议
一般网站都会增加一个robots.txt 来说明可以爬、不可爬以及不愿意被爬的内容。 - 技术上:没有约束力
如果需要禁止某个agent访问,则需要在安全程序层面加以监测和阻止。 - 法律上:作为参考
一方面,robots 上不允许爬虫的,一般最好不要爬,以防影响网站的正常业务(可能存在法律风险);
另一方面,robots协议默认允许所有项;
除此之外,网站所有者可能没有关注或者写错 robots.txt 相关的信息;
因此需要根据常识判断,不能随意爬、无限速爬(QPS 不能影响对方正常服务),若不确定时候可以咨询相关人士或者联系网站管理人员(有些爬虫数据是有利于你网站方的)。
以下为 github、zhenai、xcar 等3个常见网站的爬虫约束文档;从文档中可以发现github 有很多子页面都是不希望被爬取的,珍爱网很多 profile下很多操作也是被希望被爬取的。
1) https://github.com/robots.txt
# If you would like to crawl GitHub contact us via https://support.github.com/contact/
# We also provide an extensive API: https://developer.github.com/
User-agent: baidu
crawl-delay: 1
User-agent: *
Disallow: /*/pulse Disallow: /*/tree/
Disallow: /*report-abuse?report=* Disallow: /*tab=* ...... Disallow: /account-login Disallow: /Explodingstuff/ 2) https://www.zhenai.com/robots.txt User-agent: * Disallow: /*?* Disallow: /*jsps* Disallow: /login/* Disallow: /register* Disallow: /profile/addfriend.jsps* Disallow: /profile/getmemberdata11.jsps* Disallow: /profile/getmemberdata.jsps* Disallow: /profile/addfriend.jsps* Disallow: /profile/sendleer.jsps* Disallow: /?fromMemberId=* Disallow: /.asp$ Disallow: /.php$ Disallow: /.action$ Disallow: /plus/ Disallow: /kwsearch/ 3) https://www.xcar.com.cn/robots.txt User-agent: * Disallow: /bbs/admin/ Disallow: /bbs/api/ ...... Disallow: /.js?* Disallow: /.php?type=cms sitemap: http://www.xcar.com.cn/sitemap.xml
2.3 新爬虫的选择
爬取网站类别:比较廉价的数据,访问量大的网站;
参考数据类别:金融、体育、新闻、产品等类别的数据;
本项目:
1)爬取爱卡汽车各车型数据;
2)项目的设计使得我们只需要增量修改;
3)新的解析器,新的配置;
通过本项目可以学习模块化、任务管理、调度、分布式搭建、接口、函数式编程等各类 golang 基础知识。
2.4 总体算法
想让程序获取数据信息,那么必须先尝试人工获取信息,然后设置指定爬虫起始爬虫位置,再根据规则爬取需要的数据,根据链接爬取更多的数据。
本案例通过查看 珍爱网 和 世纪佳缘网 ,发现可以从 珍爱网-征婚 页面可以找到所有城市信息,并且能在不登录的情况下查看对应的用户数据(当然少量操作需要登录状态下才能获取);因此,本案例爬取珍爱网数据。
算法说明:
本案例中 爬虫总体算法 和 爬虫实现步骤如下图所示:
算法层面,从城市列表 获取子城市数据,然后进一步获取用户数据,并且根据用户能进一步获取推荐用户数据;
实现步骤层面,从单任务版升级到并发版本,再进一步优化为分布式版本;
爬虫总体算法
爬虫实现步骤
3 注意事项
待添加
4 说明
- 软件环境
go版本:go1.15.8
操作系统:Ubuntu 20.04 Desktop
Idea:2020.01.04 - 参考文档
由浅入深掌握Go语言 –慕课网
经典爬虫框架-henrylee2cn/pholcus
经典爬虫框架-gocrawl
经典爬虫框架-colly
经典爬虫框架-hu17889/go_spider
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/4637.html