python網絡爬蟲學習(二)一個爬取百度貼吧的爬蟲程序

今天進一步學習了python網絡爬蟲的知識,學會了寫一個簡單的爬蟲程序,用於爬取百度貼吧的網頁並保存爲HTML文件。下面對我在實現這個功能時的代碼以及所遇到的問題的記錄總結和反思。

首先分析實現這個功能的具體思路:
通過對貼吧URL的觀察,可以看出貼吧中的帖子的URL有這樣一個特徵,以“http://tieba.baidu.com/p/4463392102?pn=3”這個URL爲例,它由“http://tieba.baidu.com/p/4463392102?”和“pn=3”組成,其中,前半部分爲帖子第一頁的URL,而“pn=”則決定了第幾頁(比如pn=3位第三頁)。通過這樣的分析我們大致可以獲得這樣的思路:

1.通過用戶輸入確定URL的前半部分,起始頁碼和終止頁碼
2.通過循環實現對要保存文件的命名,下載進度顯示等功能的實現
3.將解析到的HTML文檔寫入我們之前創建的文件之中
4.關閉文件,程序結束

代碼如下:

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:百度貼吧爬蟲
#   版本:0.1
#   作者:Kelvin
#   日期:2016-05-21
#   語言:Python 2.7
#   操作:輸入帶分頁的地址,去掉最後面的數字,設置一下起始頁數和終點頁數。
#   功能:下載對應頁碼內的所有頁面並存儲爲html文件。
#---------------------------------------
import urllib2,string
#定義貼吧爬蟲函數
def tieba(url,start,end):
    #從start到end+1進行循環
    for i in range(start,end+1):
        fName=string.zfill(i,5)+'.html'#將文件命名爲六位的帶有序號的html文件
        print '正在下載第'+str(i)+'個文件,並將其轉存爲'+fName
        file=open(fName,'w+')
        #獲取內容並進行解析
        response=urllib2.urlopen(url+str(i)).read()
        #寫入文件
        file.write(response)
        #關閉文件
        file.close()
#--------------------------------------------------
#獲取用戶輸入
bdurl=str(raw_input(u'請輸入帖子的URL,不包含pn之後的數字\n'))
start=int(raw_input(u'請輸入起始頁碼\n'))
end=int(raw_input(u'請輸入終止頁碼\n'))

#調用函數
tieba(bdurl,start,end)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章