爬蟲最簡單的架構(gòu)就三個(gè)方面:
1.URL管理器:主要負(fù)責(zé)url的管理,可以添加新的url到爬取集合中,將url從待爬取移到已爬取集合等等功能,url管理器的實(shí)現(xiàn)方式主要分為3種,python內(nèi)存中用集合set()來管理,關(guān)系數(shù)據(jù)庫mysql,緩存數(shù)據(jù)庫redis;
2.網(wǎng)頁下載器:將url對(duì)應(yīng)的網(wǎng)頁下載到本地,主要的網(wǎng)頁下載器有:urllib是python官方提供的模塊,requests是一個(gè)強(qiáng)大的三方庫;
現(xiàn)在就用urllib來下載網(wǎng)頁試試:
下載1:

下載2:主要增加了一個(gè)請(qǐng)求頭,有些情況下在請(qǐng)求的時(shí)候是需要指明請(qǐng)求頭的一些信息的;

下載3:主要增加了對(duì)cookie的應(yīng)用;

3.網(wǎng)頁解析器:從網(wǎng)頁中提取有價(jià)值的數(shù)據(jù)的工具,網(wǎng)頁解析器也有很多,比如:用正則表達(dá)式,html.parser,beautifulsoup,lxml等等,其中最強(qiáng)大就是beautifulsoup這個(gè)第三方解析器,它可以指定解析方式,現(xiàn)在常用的解析方式就是dom樹解析,其實(shí)就是根據(jù)節(jié)點(diǎn)去解析;
beautifulsoup的用法舉例:
1.創(chuàng)建beautifulsoup對(duì)象,soup=beautifulsoup("文檔字符串","html解析器","html文檔的編碼")
2.findall("節(jié)點(diǎn)","屬性","文本"),并且支持正則表達(dá)式
3.獲取信息:node.name:節(jié)點(diǎn)標(biāo)簽名稱,node["href"]節(jié)點(diǎn)的href屬性,node.get_text()節(jié)點(diǎn)的鏈接文字;

正式開始:在開始之前,我們確定目標(biāo),爬取百度百科美女詞條的標(biāo)題和簡介
入口頁:https://baike.baidu.com/item/美女
詞條頁面url格式:/item/青苔賦
數(shù)據(jù)格式——標(biāo)題:<title> 美女_百度百科</title>
數(shù)據(jù)格式——簡介:<meta name="keywords" context="美女 美女漢語詞匯 美女女人分類 美女審美標(biāo)準(zhǔn) 美女中國美女出產(chǎn)代表地">
編碼:UTF-8
美女_百度百科美女_百度百科美女_百度百科美女_百度百科
下面貼出主module的代碼:代碼也比較簡單,沒啥多講的,只要按照思路一步一步走,就沒啥問題,還是簡單說一下邏輯:首先拿到目標(biāo)url,這里需要注意一點(diǎn)就是url考進(jìn)pycharm會(huì)自動(dòng)被urlencode處理,因?yàn)楹芏嘧址趗rl里面是不能存在的,必須先經(jīng)過編碼過程,然后我們需要下載器,解析器,url管理器以及數(shù)據(jù)處理器這幾個(gè)模塊,我們?cè)陬惓跏蓟腿?shí)例出這幾個(gè)對(duì)象,然后我們把url添加進(jìn)url管理器,然后在不斷的輪詢,通過urllib模塊下載,通過BeautifulSoup解析,把新得到的urls添加進(jìn)url管理器,把解析出來的數(shù)據(jù)添加進(jìn)數(shù)據(jù)處理器,最后在把數(shù)據(jù)輸出成html樣式,輸出的時(shí)候需要注意一點(diǎn),因?yàn)槲覀兊膗rl是經(jīng)過urlencode編碼過的,所以要輸出原樣的url就必須解碼出來,這里使用的是urllib的parse模塊的unquote方法,解析出url,然后再把url,title,以及description以表格的形式寫入html,最后得到html文件;

我們看看結(jié)果:

代碼放在了github上面,地址:https://github.com/softwareXiaotao/spider_baidubaike