python網路爬蟲學習(二)一個爬取百度貼吧的爬蟲程式
阿新 • • 發佈:2019-01-06
今天進一步學習了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)