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 協定
一般網站都會增加一個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 總體算法
想讓程式擷取資料資訊,那麼必須先嘗試人工擷取資訊,然後設定指定爬蟲起始爬蟲位置,再根據規則爬取需要的資料,根據連結爬取更多的資料。
本案例通過檢視 珍愛網 和 世紀佳緣網 ,發現可以從 珍愛網-征婚 頁面可以找到所有城市資訊,并且能在不登入的情況下檢視對應的使用者資料(當然少量操作需要登入狀态下才能擷取);是以,本案例爬取珍愛網資料。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CMwgTMyIGN1UzMkhTOxMGMzYzX3MjM0kDM5IzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
算法說明:
本案例中 爬蟲總體算法 和 爬蟲實作步驟如下圖所示:
算法層面,從城市清單 擷取子城市資料,然後進一步擷取使用者資料,并且根據使用者能進一步擷取推薦使用者資料;
實作步驟層面,從單任務版更新到并發版本,再進一步優化為分布式版本;爬蟲總體算法
爬蟲實作步驟
3 注意事項
4 說明
-
軟體環境
go版本:go1.15.8
作業系統:Ubuntu 20.04 Desktop
Idea:2020.01.04