当前位置:   article > 正文

golang笔记14--go 语言爬虫实战项目介绍_go-rod

go-rod

1 介绍

本文继上文 golang笔记13–go语言 http 及其它标准库, 进一步了解 go 语言爬虫实战项目介绍,以及相应注意事项。
具体包括: 爬虫项目介绍、爬虫的法律风险、新爬虫的选择、总体算法 等内容。

2 开始实战项目

2.1 爬虫项目介绍

  1. 选择爬虫项目原因
    1)有一定的复杂性;
    2)可以灵活调整项目的复杂性;
    3)需要平衡语言 | 爬虫之间的比重;

  2. 网络爬虫分类
    1)通用爬虫,例如百度、Google,它们会搜索互联网上的所有数据并保存下来,搜搜的时候直接从存储的备份里面找到目标内容,然后再访问实际网站内容;
    2)聚焦爬虫,从互联网获取结构话数据,不保存所有数据,只根据一些需要提取需要的数据;

  3. 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开发,是一个开放的垂直领域的爬虫框架,框架中将各个功能模块区分开,方便使用者重新实现子模块,进而构建自己垂直方方向的爬虫。

  4. 项目总体结构
    1)选择目标网络资源,如珍爱网、爱卡网;
    2)完成分布式爬虫模块;
    3)存储到指定数据库中;
    4)提供简单的前端展示;
    本项目为了提高go语言熟练度,不使用现有爬虫库,全部手写;使用ElasticSearch 作为数据存储;使用go语言标准模板库实现 http 数据展示部分;

2.2 爬虫的法律风险

  1. robots 协议
    一般网站都会增加一个robots.txt 来说明可以爬、不可爬以及不愿意被爬的内容。
  2. 技术上:没有约束力
    如果需要禁止某个agent访问,则需要在安全程序层面加以监测和阻止。
  3. 法律上:作为参考
    一方面,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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

2.3 新爬虫的选择

爬取网站类别:比较廉价的数据,访问量大的网站;
参考数据类别:金融、体育、新闻、产品等类别的数据;

本项目:
1)爬取爱卡汽车各车型数据;
2)项目的设计使得我们只需要增量修改;
3)新的解析器,新的配置;

通过本项目可以学习模块化、任务管理、调度、分布式搭建、接口、函数式编程等各类 golang 基础知识。

2.4 总体算法

想让程序获取数据信息,那么必须先尝试人工获取信息,然后设置指定爬虫起始爬虫位置,再根据规则爬取需要的数据,根据链接爬取更多的数据。
本案例通过查看 珍爱网世纪佳缘网 ,发现可以从 珍爱网-征婚 页面可以找到所有城市信息,并且能在不登录的情况下查看对应的用户数据(当然少量操作需要登录状态下才能获取);因此,本案例爬取珍爱网数据。
在这里插入图片描述
算法说明:
本案例中 爬虫总体算法 和 爬虫实现步骤如下图所示:
算法层面,从城市列表 获取子城市数据,然后进一步获取用户数据,并且根据用户能进一步获取推荐用户数据;
实现步骤层面,从单任务版升级到并发版本,再进一步优化为分布式版本;

爬虫总体算法


爬虫实现步骤

3 注意事项

待添加

4 说明

  1. 软件环境
    go版本:go1.15.8
    操作系统:Ubuntu 20.04 Desktop
    Idea:2020.01.04
  2. 参考文档
    由浅入深掌握Go语言 --慕课网
    经典爬虫框架-henrylee2cn/pholcus
    经典爬虫框架-gocrawl
    经典爬虫框架-colly
    经典爬虫框架-hu17889/go_spider
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/607737
推荐阅读
相关标签
  

闽ICP备14008679号