什么是網(wǎng)絡(luò)爬蟲(chóng)
網(wǎng)絡(luò)爬蟲(chóng)(又被稱為網(wǎng)頁(yè)蜘蛛丁存,網(wǎng)絡(luò)機(jī)器人肩杈,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁(yè)追逐者)解寝,是一種按照一定的規(guī)則扩然,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或者腳本(——百度百科)。
所以聋伦,網(wǎng)絡(luò)爬蟲(chóng)是一段具有以下功能的程序:
1夫偶、能夠根據(jù)規(guī)則自動(dòng)搜索獲得網(wǎng)址;
1嘉抓、能夠訪問(wèn)指定網(wǎng)址的網(wǎng)絡(luò)資源并下載索守;
2、能夠?qū)ο螺d的資源進(jìn)行解析抑片,抓取指定信息卵佛。
什么時(shí)候用爬蟲(chóng)
假如我們要對(duì)比京東和淘寶的物價(jià)。對(duì)比一個(gè)商品很簡(jiǎn)單,我們分分鐘就可以完成一個(gè)商品的對(duì)比截汪,但是京東和淘寶上的商品有多少疾牲?如果我想得到所有同類商品的比價(jià),人工一個(gè)個(gè)對(duì)比顯然是不現(xiàn)實(shí)的衙解,這時(shí)候我們就可以使用爬蟲(chóng)來(lái)幫我們做這個(gè)工作阳柔。對(duì)比一個(gè)物價(jià)我們要做兩步:1、訪問(wèn)商品頁(yè)面蚓峦;2舌剂、對(duì)比商品價(jià)格。這正是爬蟲(chóng)的兩個(gè)功能暑椰,訪問(wèn)商品頁(yè)面和抓取商品類別與價(jià)格數(shù)據(jù)霍转。而要訪問(wèn)所有商品則是網(wǎng)絡(luò)爬蟲(chóng)的另一個(gè)功能——自動(dòng)搜索網(wǎng)址。
所以我們?cè)谝韵虑闆r中使用網(wǎng)絡(luò)爬蟲(chóng):
1一汽、需要獲得大量相互關(guān)聯(lián)的網(wǎng)絡(luò)資源中的指定數(shù)據(jù)避消;
2、要訪問(wèn)的數(shù)據(jù)是爬蟲(chóng)使用者可以通過(guò)合法渠道訪問(wèn)到的召夹。
Python3實(shí)現(xiàn)最簡(jiǎn)單的爬蟲(chóng)
廢話不多說(shuō)直接上干貨岩喷,我們先實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的爬蟲(chóng),只具有下載指定URL網(wǎng)頁(yè)功能的小爬蟲(chóng)监憎,我們?cè)谥笠稽c(diǎn)點(diǎn)完善它纱意。
準(zhǔn)備工作
在此我們假設(shè)您已經(jīng)做好以下準(zhǔn)備:
1、安裝了Python3并且有一定的Python基礎(chǔ)(能讀懂代碼就行)
2鲸阔、安裝了pip
3妇穴、具有網(wǎng)絡(luò)
代碼
#/usr/lib/python3
from urllib import request
def download(url):
resp = request.urlopen(url)
result = resp.read()
result = result.decode("utf-8")
return result
print(download("http://www.jd.com"))
你木有看錯(cuò),就是這么簡(jiǎn)單……是不是很驚喜隶债,仿佛寫(xiě)了個(gè)helloworld。接下來(lái)讓我們來(lái)聊一聊這段簡(jiǎn)短的代碼跑筝。
要引入的庫(kù)
編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)我們要使用到urllib包死讹,我們可以通過(guò)這個(gè)網(wǎng)址獲得urllib庫(kù)的介紹【https://docs.python.org/3/library/urllib.html#module-urllib】,中文版在這里【http://python.usyiyi.cn/translate/python_352/library/urllib.html#module-urllib】曲梗,這是一個(gè)用于URL處理的包赞警。其中包含的request模塊定義了打開(kāi)URL的函數(shù)和類。這個(gè)包是Python3 自帶的虏两,無(wú)需下載愧旦。
代碼解釋
好吧,沒(méi)什么好解釋的定罢,我們寫(xiě)了一個(gè)download方法笤虫,當(dāng)傳入一個(gè)正確的URL的時(shí)候返回下載下來(lái)的資源內(nèi)容。特別要注意的是,要記得將編碼轉(zhuǎn)換成UTF-8
完善
就像上面說(shuō)的我們的這個(gè)方法是沒(méi)有容錯(cuò)能力的琼蚯,我們需要做一些改善酬凳,使得輸入錯(cuò)誤的URL的時(shí)候程序依然能夠運(yùn)行,并且給出一些友好的提示遭庶。
#/usr/lib/python3
from urllib import request
from urllib import error
def download(url):
print('正在下載:',url)
try:
resp = request.urlopen(url)
result = resp.read()
result = result.decode("utf-8")
except error.URLError as e:
print('下載出現(xiàn)錯(cuò)誤 : ', e)
result = None
return result
print(download("http://www.jd.com"))
print(download("http://www.j.com"))
如此當(dāng)輸入一個(gè)錯(cuò)誤的URL的時(shí)候就返回None并且給出提示宁仔。
好啦,最簡(jiǎn)單的爬蟲(chóng)就是這樣峦睡,之后我們一點(diǎn)點(diǎn)地完善它翎苫。
~~~預(yù)知后事如何,且聽(tīng)下集分解~~~
下集預(yù)告
這一段小小的代碼還是有邏輯上的問(wèn)題的榨了,下集修改煎谍!