第一個爬蟲

? ? ? ? 在慕課網(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 1.定義Item Item 是保存爬取到的數(shù)據(jù)的容器;其使用方法和 python 字典類似。 您可以通過創(chuàng)建一個 ...
    SingleDiego閱讀 1,006評論 0 1
  • 1. 安裝IDE以及hello world 一個優(yōu)秀的IDE可以極大地提高工作效率,在這里我選擇使用JetBrai...
    flywith24閱讀 586評論 0 0
  • #第一個爬蟲 --- 今天寫了第一個爬蟲,幾點困難: 1. 開發(fā)環(huán)境設(shè)置: py3.5 vs py2.7,anac...
    林六如閱讀 498評論 0 0
  • 文集名字已經(jīng)改成《蜘蛛結(jié)網(wǎng)》了,那么這個專題下不限于課程學(xué)習(xí)的練習(xí)題,也有自己的練手和札記。最近去爬了一個留學(xué)服務(wù)...
    mugichya閱讀 353評論 0 1