你聽過爬蟲嗎?
計算中的爬蟲,又稱為網(wǎng)絡(luò)爬蟲、網(wǎng)頁蜘蛛、網(wǎng)絡(luò)機(jī)器人,它是一段計算機(jī)器代碼,可以自動抓取網(wǎng)頁上的數(shù)據(jù)。
網(wǎng)頁是由什么組成呢?
網(wǎng)頁一般由文本、圖像、音頻、視頻等元素組成。
它們通過html、JS、css等編程語法排列組合,然后生成網(wǎng)頁。也就是說,我們看到的文字、圖片、視頻等是和HTML等元素混合在一起的。
爬蟲所做的工作就是從網(wǎng)頁中把我們關(guān)心的文本、圖像、音頻、視頻等提取出來,我們不關(guān)心HTML等元素,但我們需要按照HTML等的語法來解析網(wǎng)頁。
爬蟲的基本結(jié)構(gòu)
一個簡單的爬蟲由四部分組成:URL管理器、網(wǎng)頁下載器、網(wǎng)頁解析器、數(shù)據(jù)存儲器等。
- URL管理器就是你要下載哪個網(wǎng)頁的內(nèi)容,URL中有超鏈接,這些鏈接是否需要下載,下載時需要去重等。
- 網(wǎng)頁下載器就是下載網(wǎng)頁的內(nèi)容,將網(wǎng)頁的內(nèi)容下載到本地。常用的兩個http請求庫有urllib庫和request庫。前者是Python/ target=_blank class=infotextkey>Python官方基本模塊。后者是性能優(yōu)越使用廣泛的第三方庫。
- 網(wǎng)頁解析器就是解析網(wǎng)頁內(nèi)容,提取我們關(guān)心的信息。用到的知識有正則表達(dá)式、lxml庫和Beautiful Soup庫。
- 數(shù)據(jù)存儲庫主要就是存儲數(shù)據(jù),將數(shù)據(jù)持久化存儲到本地。
為什么Python在爬蟲領(lǐng)域獨領(lǐng)風(fēng)騷?
因為有很多成熟好用的相關(guān)庫,拿來就用,節(jié)省了造輪子的時間。
爬蟲的工作流程
爬蟲的工作流程主要有四步:
- Request發(fā)起請求,客戶端請求服務(wù)器響應(yīng)。
- Reponse獲取響應(yīng),此時服務(wù)器將所請求的網(wǎng)頁送到客戶端。
- 解析內(nèi)容,利用正則表達(dá)式、lxml庫或Beautiful Soup庫提取目標(biāo)信息。
- 保存數(shù)據(jù),將解析后的數(shù)據(jù)保存到本地,可以是文本、音頻、圖片、視頻等。
如何限制爬蟲
目前對網(wǎng)絡(luò)爬蟲的限制主要有兩種方式:
1.來源審查:判斷User-Agent(在請求頭中的一個鍵值對)進(jìn)行限制,通過該鍵值對可以判斷發(fā)起網(wǎng)絡(luò)請求的瀏覽器類型,網(wǎng)站維護(hù)人員可以根據(jù)這個進(jìn)行請求限制。
2.發(fā)布公告:Robots協(xié)議。
Robots協(xié)議是一種網(wǎng)站管理員用來告知搜索引擎蜘蛛哪些頁面可以抓取,哪些頁面不可以抓取的文本文件。
robots.txt是一種存放于網(wǎng)站根目錄下的ASCII編碼的文本文件,它通常告訴網(wǎng)絡(luò)搜索引擎的漫游器(又稱網(wǎng)絡(luò)爬蟲/蜘蛛),此網(wǎng)站中的哪些內(nèi)容是不能被搜索引擎的漫游器獲取的,哪些是可以被獲取的。當(dāng)robots訪問一個網(wǎng)站時,它會首先查看該網(wǎng)站根目錄下是否存在robots.txt文件,如果存在,它將按照文件中規(guī)定的規(guī)則進(jìn)行訪問 。
可以查看一些網(wǎng)站的robots.txt文件,比如:
遵紀(jì)守法
robots.txt是道德規(guī)范,是一個協(xié)議,它不是命令,不是強(qiáng)制執(zhí)行,大家一定要自覺遵守。
爬蟲技術(shù)是一種自動化獲取網(wǎng)絡(luò)信息的技術(shù),但是如果不遵守相關(guān)法律法規(guī),就會觸犯法律。
為了避免這種情況,我們可以采取以下措施:
1.在爬蟲程序中設(shè)置訪問限制,避免對目標(biāo)網(wǎng)站造成過大的訪問壓力;
2.在爬蟲程序中設(shè)置合理的請求間隔,避免對目標(biāo)網(wǎng)站造成過大的訪問量;
3.在爬蟲程序中設(shè)置合理的抓取深度,避免對目標(biāo)網(wǎng)站造成過大的數(shù)據(jù)抓取量;
4.在爬蟲程序中設(shè)置合理的數(shù)據(jù)存儲方式,避免對目標(biāo)網(wǎng)站造成過大的數(shù)據(jù)存儲壓力;
5.在使用爬蟲技術(shù)時,應(yīng)該尊重目標(biāo)網(wǎng)站的隱私權(quán)和知識產(chǎn)權(quán),不得侵犯其合法權(quán)益 。