Python 3 爬蟲學(xué)習(xí)筆記 3 開始爬取多個(gè)頁面或者一個(gè)站點(diǎn)

此學(xué)習(xí)筆記整理于 Ryan Mitchell Web Scraping with Python- Collecting Data from the Modern Web (2015) Chapter 3 Starting to crawl

一,隨機(jī)跳轉(zhuǎn)


隨機(jī)跳轉(zhuǎn)

首先,說下函數(shù)定義的過程。

def 函數(shù)名(參數(shù))

函數(shù)內(nèi)容代碼

return XX #函數(shù)返回什么

我們來看這個(gè)函數(shù),名稱getLinks,參數(shù)是articleUrl。

函數(shù)內(nèi)容代碼:首先打開這個(gè)網(wǎng)址(兩個(gè)文本合起來的)

bs美化下,找到div tag,然后id屬性是bodyContent。在此基礎(chǔ)上,再找到所有的,a tag(有鏈接的tag),然后是關(guān)鍵詞href應(yīng)該等于什么?re.compile是正則表達(dá)式,后面看:(/wiki/)這樣的形式,(我也不知道為啥/沒有用\來表示其本義,可能是加了括號(hào)吧,理解就好,(\/wiki\/)也可以的),括號(hào)前加了^,表示以括號(hào)內(nèi)的內(nèi)容開頭,然后是(??。海┍硎静话ǎ海?(??。海?) 至少有一個(gè)字符,然后是*,表示重復(fù)若干次,$表示結(jié)尾(從頭到尾不包括:)。

這里的篩選是作者發(fā)現(xiàn)的一些rules需要遵守,爬蟲來篩選我們需要的內(nèi)容是總是需要不同的rules來篩選。

random.seed(datetime.datetime.now()) 表示選擇隨機(jī)生成數(shù)的seed也來一下隨機(jī),表示隨機(jī)即可。

作者給了一個(gè)初始頁面 "/wiki/Kevin_Bacon" 再加上函數(shù)里面的"http://en.wikipedia.org" 就是一個(gè)wiki的頁面了。

這個(gè)函數(shù)是用來獲取一個(gè)頁面內(nèi)的某種鏈接,得到了一系列的鏈接,然后從中任意選取一個(gè)。links是數(shù)組,索引從0開始,所以后面要減一。選擇了links中的某一個(gè)link,然后打印出來,最后以這個(gè)開始新的循環(huán)。

二,爬wiki站點(diǎn)

上一個(gè)是在wiki內(nèi)隨機(jī)游走,初始頁面(一個(gè)鏈接),然后在此頁面內(nèi)隨機(jī)選取一個(gè)鏈接,重復(fù)過程。這個(gè)是在wiki homepage 開始,找出所有鏈接,打開所有鏈接,然后在打開的鏈接內(nèi)再找出所有鏈接,以此爬取整個(gè)site。


定義一個(gè)函數(shù)來爬取所有的頁面,以此重復(fù)。pages剛開始設(shè)置為一個(gè)空的列表,然后加入新的鏈接,以此來避免重復(fù)爬取一個(gè)頁面。這里的href在findAll里面應(yīng)該是一個(gè)關(guān)鍵字,后面加了一個(gè)if驗(yàn)證,我也不太清楚??赡苁怯械膆ref可能不是attrs?也有可能是link的有效性之類的吧。

兩個(gè)小函數(shù):replace(old,new,max)用法:String.replace(old,new,max)

? ? ? ? ? ? ? ? ? ? ?split(string,count) string 默認(rèn)包括空格 /n /t


這里有一個(gè)global 的用法,意思就是函數(shù)里外都是這個(gè)的意思。

這一章的內(nèi)容難了!越來越難了,加油!

P.S.:沒能上車的小伙伴歡迎留言,如果我會(huì)我直接回答你!如果不會(huì),我谷歌后回答你!如果要加我微信,不行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容