? ? ? ? 在慕課網(wǎng)上學(xué)習(xí)了簡單的爬蟲該怎么寫,看了一遍,敲了一遍,還是有些迷糊,于是,又把每一步的要點總結(jié)了一下。
課程地址:http://www.imooc.com/video/10674
######? spider_main
1.編寫入口函數(shù)(main函數(shù))
(1)設(shè)置要爬取的入口url
(2)通過SpiderMain()創(chuàng)建一個spider
(3)調(diào)動spider的craw方法啟動爬蟲
(4)創(chuàng)建SpiderMain()這個class,并創(chuàng)建craw()函數(shù)
(5)在構(gòu)造函數(shù)中初始化url管理器,下載器,解析器,輸出器
(6)創(chuàng)建并初始化各個class并import他們
(7)在craw()方法中將入口url添加進url管理器
(8)創(chuàng)建循環(huán)獲取url管理器中的一個待爬取url
(9)下載頁面存儲到html_cont
(10)通過parser解析(new_url,html_cont)創(chuàng)建new_urls,new_data(新鏈接和新數(shù)據(jù))
(11)outputer收集數(shù)據(jù)
(12)調(diào)用outputer的output_html()輸出收集到的數(shù)據(jù)
(13)創(chuàng)建各個方法
(14)創(chuàng)建count,記錄爬取了第幾個url
(15)加判斷,1000個爬取后停止
(16)加異常處理,加到try塊中
###### url_manager
(1)在構(gòu)造函數(shù)中創(chuàng)建new_urls和old_urls
1.在add_new_url中
(1)判斷url是否為空
(2)若url既不在new_urls中也不在old_urls中,add進new_urls
2.在add_new_urls中
(1)判斷url是否為空或長度是否為0
(2)通過循環(huán),將url加入new_urls(調(diào)用add_new_url)
3.在has_new_url中
(1)判斷url是否為0,并返回
4.在get_new_url中
(1)通過pop函數(shù)獲取待爬取url
(2)將獲取的url放入old_urls
(3)返回獲取到的url
###### HtmlDownloader
1.在download函數(shù)中
(1)判斷url是否為空
(2)通過urllib的urlopen打開url
(3)通過判斷getcode()是否為200 判斷請求是否成功
(4)若成功,返回read()
###### HtmlParser
1.在parse中
(1)判斷page_url和html_url
(2)創(chuàng)建soap,加載cont
(3)創(chuàng)建兩個本地方法,獲取urls和data
(4)實現(xiàn)兩個方法,并返回
2.在_get_new_urls中
(1)通過soup獲取所有的鏈接(用正則表達式)
(2)通過循環(huán),將所有鏈接放入link['href']
(3)將不完整的鏈接拼接(通過urljoin)
(4)將鏈接添加到new_urls,返回new_urls
3.在_get_new_data中
(1)建立res_data存放title和summary數(shù)據(jù)
(2)建立title_node,summary_node
(3)通過soup,提取數(shù)據(jù)
(4)將數(shù)據(jù)提取出來,放入res_data中
(5)將url也放入res_data
(6)返回res_data
######Outputer
1.在構(gòu)造函數(shù)中初始化,建立列表維護數(shù)據(jù)
2.在collect_data中
(1)判斷數(shù)據(jù)是否為空
(2)不為空就加入到self.datas
3.在output_html中
(1)建立文件輸出對象
(2)加入html,body,table標(biāo)簽和他們的閉合標(biāo)簽
(3)在每一行中,輸出data的url,title,summary
(4)用encode將編碼規(guī)則變?yōu)閡tf-8