寫出來的爬蟲,肯定不能只在一個頁面爬,只要要爬幾個頁面,甚至一個網站,這時候就需要用到翻頁了 其實翻頁很簡單,還是這個頁面http://bbs.fengniao.com/forum/10384633.html,話說我得給這個人增加了多大的訪問量啊...... 10384633重點關註下這個數字,這個 ...
寫出來的爬蟲,肯定不能只在一個頁面爬,只要要爬幾個頁面,甚至一個網站,這時候就需要用到翻頁了
其實翻頁很簡單,還是這個頁面http://bbs.fengniao.com/forum/10384633.html,話說我得給這個人增加了多大的訪問量啊......
10384633重點關註下這個數字,這個就是頁面的名稱,現在嘗試把這個數字+/-1看看有沒有結果
驗證http://bbs.fengniao.com/forum/10384634.html
可以看到,這個頁面是可以訪問的
再試試http://bbs.fengniao.com/forum/10384632.html,這次不截圖了,可以自己去試試,也是可以訪問的
那麼接下來就好辦了,只要把這個數字每次+1或-1就可以了,甚至可以從http://bbs.fengniao.com/forum/1.html開始嘗試連接,一直+1,直到502或404斷開
下麵上代碼,還是用之前的內容,這次加了個頁面處理的函數
#!/usr/bin/python # coding: UTF-8 import urllib import urllib2 import re #處理地址,並獲取頁面全部的圖片地址 def get_image_url(url): #url_format = urllib2.Request(url) #1 url_open = urllib.urlopen(url) #2 url_read = url_open.read() #3 re_value = re.compile('(?<=src\=\").*?\.jpg') image_url_list = re.findall(re_value,url_read) #4 return image_url_list #這個函數專門用來下載,前面兩行是將圖片連接中/前面的內容全部刪除,留下後面的文件名用來保存文件的,try不說了,不清楚請翻回去看容錯 def down_image(image_url): rev = '^.*/' file_name = re.sub(rev,'',image_url) try: urllib.urlretrieve(image_url,file_name) except: print 'download %s fail' %image_url else: print 'download %s successed' %image_url #這個函數用來處理頁面,每次+1 def get_page(url): url_num = re.search('(?<=\/)[0-9]+(?=\.)',url) url_num = url_num.group() url_num_1 = int(url_num) + 1 url = url.replace(url_num,str(url_num_1)) return url if __name__ == '__main__': url = 'http://bbs.fengniao.com/forum/10384633.html' for n in range(1,10): url = get_page(url) image_url_list = get_image_url(url) for image_url in image_url_list: down_image(image_url) #5
其實可以給get_page傳兩個參數,一個是URL另一個是遞增的數值,就變成了get_page(url,n),但是我沒有這麼寫,可以思考下為什麼,如果把for n in range(1,10)改成while True會怎樣?嘿嘿......回頭人家封你IP可別找我啊