此學(xué)習(xí)筆記整理于 Ryan Mitchell Web Scraping with Python- Collecting Data from the Modern Web (2015) Chapter 3 Starting to crawl
一挡篓,隨機(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)容開頭沧踏,然后是(?=矶ぁ:)表示不包括:翘狱,((?E椴浴:).) 至少有一個(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)證馋评,我也不太清楚〈汤玻可能是有的href可能不是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ì)蒙兰,我谷歌后回答你磷瘤!如果要加我微信,不行搜变。