golang笔记14--go 语言爬虫实战项目介绍
golang筆記14--go 語言爬蟲實戰項目介紹
- 1 介紹
- 2 開始實戰項目
- 2.1 爬蟲項目介紹
- 2.2 爬蟲的法律風險
- 2.3 新爬蟲的選擇
- 2.4 總體算法
- 3 注意事項
- 4 說明
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開發,是一個開放的垂直領域的爬蟲框架,框架中將各個功能模塊區分開,方便使用者重新實現子模塊,進而構建自己垂直方方向的爬蟲。
項目總體結構
1)選擇目標網絡資源,如珍愛網、愛卡網;
2)完成分布式爬蟲模塊;
3)存儲到指定數據庫中;
4)提供簡單的前端展示;
本項目為了提高go語言熟練度,不使用現有爬蟲庫,全部手寫;使用ElasticSearch 作為數據存儲;使用go語言標準模板庫實現 http 數據展示部分;
2.2 爬蟲的法律風險
一般網站都會增加一個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: 1User-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=cmssitemap: http://www.xcar.com.cn/sitemap.xml2.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
總結
以上是生活随笔為你收集整理的golang笔记14--go 语言爬虫实战项目介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jupyter notebook 使用过
- 下一篇: x86从实模式到保护模式实验说明