golang笔记14--go 语言爬虫实战项目介绍
golang筆記14--go 語(yǔ)言爬蟲(chóng)實(shí)戰(zhàn)項(xiàng)目介紹
- 1 介紹
- 2 開(kāi)始實(shí)戰(zhàn)項(xiàng)目
- 2.1 爬蟲(chóng)項(xiàng)目介紹
- 2.2 爬蟲(chóng)的法律風(fēng)險(xiǎn)
- 2.3 新爬蟲(chóng)的選擇
- 2.4 總體算法
- 3 注意事項(xiàng)
- 4 說(shuō)明
1 介紹
本文繼上文 golang筆記13–go語(yǔ)言 http 及其它標(biāo)準(zhǔn)庫(kù), 進(jìn)一步了解 go 語(yǔ)言爬蟲(chóng)實(shí)戰(zhàn)項(xiàng)目介紹,以及相應(yīng)注意事項(xiàng)。
具體包括: 爬蟲(chóng)項(xiàng)目介紹、爬蟲(chóng)的法律風(fēng)險(xiǎn)、新爬蟲(chóng)的選擇、總體算法 等內(nèi)容。
2 開(kāi)始實(shí)戰(zhàn)項(xiàng)目
2.1 爬蟲(chóng)項(xiàng)目介紹
選擇爬蟲(chóng)項(xiàng)目原因
1)有一定的復(fù)雜性;
2)可以靈活調(diào)整項(xiàng)目的復(fù)雜性;
3)需要平衡語(yǔ)言 | 爬蟲(chóng)之間的比重;
網(wǎng)絡(luò)爬蟲(chóng)分類(lèi)
1)通用爬蟲(chóng),例如百度、Google,它們會(huì)搜索互聯(lián)網(wǎng)上的所有數(shù)據(jù)并保存下來(lái),搜搜的時(shí)候直接從存儲(chǔ)的備份里面找到目標(biāo)內(nèi)容,然后再訪問(wèn)實(shí)際網(wǎng)站內(nèi)容;
2)聚焦爬蟲(chóng),從互聯(lián)網(wǎng)獲取結(jié)構(gòu)話數(shù)據(jù),不保存所有數(shù)據(jù),只根據(jù)一些需要提取需要的數(shù)據(jù);
go 語(yǔ)言常見(jiàn)爬蟲(chóng)庫(kù) | 框架
- henrylee2cn/pholcus
? Pholcus(幽靈蛛)是一款純 Go 語(yǔ)言編寫(xiě)的支持分布式的高并發(fā)爬蟲(chóng)軟件,僅用于編程學(xué)習(xí)與研究。
? 它支持單機(jī)、服務(wù)端、客戶(hù)端三種運(yùn)行模式,擁有Web、GUI、命令行三種操作界面;規(guī)則簡(jiǎn)單靈活、批量任務(wù)并發(fā)、輸出方式豐富(mysql/mongodb/kafka/csv/excel等);另外它還支持橫縱向兩種抓取模式,支持模擬登錄和任務(wù)暫停、取消等一系列高級(jí)功能。 - gocrawl
gocrawl是一個(gè)采用Go編寫(xiě)的微型并發(fā)Web爬蟲(chóng)。 - 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開(kāi)發(fā),是一個(gè)開(kāi)放的垂直領(lǐng)域的爬蟲(chóng)框架,框架中將各個(gè)功能模塊區(qū)分開(kāi),方便使用者重新實(shí)現(xiàn)子模塊,進(jìn)而構(gòu)建自己垂直方方向的爬蟲(chóng)。
項(xiàng)目總體結(jié)構(gòu)
1)選擇目標(biāo)網(wǎng)絡(luò)資源,如珍愛(ài)網(wǎng)、愛(ài)卡網(wǎng);
2)完成分布式爬蟲(chóng)模塊;
3)存儲(chǔ)到指定數(shù)據(jù)庫(kù)中;
4)提供簡(jiǎn)單的前端展示;
本項(xiàng)目為了提高go語(yǔ)言熟練度,不使用現(xiàn)有爬蟲(chóng)庫(kù),全部手寫(xiě);使用ElasticSearch 作為數(shù)據(jù)存儲(chǔ);使用go語(yǔ)言標(biāo)準(zhǔn)模板庫(kù)實(shí)現(xiàn) http 數(shù)據(jù)展示部分;
2.2 爬蟲(chóng)的法律風(fēng)險(xiǎn)
一般網(wǎng)站都會(huì)增加一個(gè)robots.txt 來(lái)說(shuō)明可以爬、不可爬以及不愿意被爬的內(nèi)容。
如果需要禁止某個(gè)agent訪問(wèn),則需要在安全程序?qū)用婕右员O(jiān)測(cè)和阻止。
一方面,robots 上不允許爬蟲(chóng)的,一般最好不要爬,以防影響網(wǎng)站的正常業(yè)務(wù)(可能存在法律風(fēng)險(xiǎn));
另一方面,robots協(xié)議默認(rèn)允許所有項(xiàng);
除此之外,網(wǎng)站所有者可能沒(méi)有關(guān)注或者寫(xiě)錯(cuò) robots.txt 相關(guān)的信息;
因此需要根據(jù)常識(shí)判斷,不能隨意爬、無(wú)限速爬(QPS 不能影響對(duì)方正常服務(wù)),若不確定時(shí)候可以咨詢(xún)相關(guān)人士或者聯(lián)系網(wǎng)站管理人員(有些爬蟲(chóng)數(shù)據(jù)是有利于你網(wǎng)站方的)。
? 以下為 github、zhenai、xcar 等3個(gè)常見(jiàn)網(wǎng)站的爬蟲(chóng)約束文檔;從文檔中可以發(fā)現(xiàn)github 有很多子頁(yè)面都是不希望被爬取的,珍愛(ài)網(wǎng)很多 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 新爬蟲(chóng)的選擇
爬取網(wǎng)站類(lèi)別:比較廉價(jià)的數(shù)據(jù),訪問(wèn)量大的網(wǎng)站;
參考數(shù)據(jù)類(lèi)別:金融、體育、新聞、產(chǎn)品等類(lèi)別的數(shù)據(jù);
本項(xiàng)目:
1)爬取愛(ài)卡汽車(chē)各車(chē)型數(shù)據(jù);
2)項(xiàng)目的設(shè)計(jì)使得我們只需要增量修改;
3)新的解析器,新的配置;
通過(guò)本項(xiàng)目可以學(xué)習(xí)模塊化、任務(wù)管理、調(diào)度、分布式搭建、接口、函數(shù)式編程等各類(lèi) golang 基礎(chǔ)知識(shí)。
2.4 總體算法
想讓程序獲取數(shù)據(jù)信息,那么必須先嘗試人工獲取信息,然后設(shè)置指定爬蟲(chóng)起始爬蟲(chóng)位置,再根據(jù)規(guī)則爬取需要的數(shù)據(jù),根據(jù)鏈接爬取更多的數(shù)據(jù)。
本案例通過(guò)查看 珍愛(ài)網(wǎng) 和 世紀(jì)佳緣網(wǎng) ,發(fā)現(xiàn)可以從 珍愛(ài)網(wǎng)-征婚 頁(yè)面可以找到所有城市信息,并且能在不登錄的情況下查看對(duì)應(yīng)的用戶(hù)數(shù)據(jù)(當(dāng)然少量操作需要登錄狀態(tài)下才能獲取);因此,本案例爬取珍愛(ài)網(wǎng)數(shù)據(jù)。
算法說(shuō)明:
本案例中 爬蟲(chóng)總體算法 和 爬蟲(chóng)實(shí)現(xiàn)步驟如下圖所示:
算法層面,從城市列表 獲取子城市數(shù)據(jù),然后進(jìn)一步獲取用戶(hù)數(shù)據(jù),并且根據(jù)用戶(hù)能進(jìn)一步獲取推薦用戶(hù)數(shù)據(jù);
實(shí)現(xiàn)步驟層面,從單任務(wù)版升級(jí)到并發(fā)版本,再進(jìn)一步優(yōu)化為分布式版本;
爬蟲(chóng)總體算法
爬蟲(chóng)實(shí)現(xiàn)步驟
3 注意事項(xiàng)
待添加
4 說(shuō)明
go版本:go1.15.8
操作系統(tǒng):Ubuntu 20.04 Desktop
Idea:2020.01.04
由淺入深掌握Go語(yǔ)言 --慕課網(wǎng)
經(jīng)典爬蟲(chóng)框架-henrylee2cn/pholcus
經(jīng)典爬蟲(chóng)框架-gocrawl
經(jīng)典爬蟲(chóng)框架-colly
經(jīng)典爬蟲(chóng)框架-hu17889/go_spider
總結(jié)
以上是生活随笔為你收集整理的golang笔记14--go 语言爬虫实战项目介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Jupyter notebook 使用过
- 下一篇: x86从实模式到保护模式实验说明