1. 程式人生 > >Python爬蟲! 單爬,批量爬,這都不是事!

Python爬蟲! 單爬,批量爬,這都不是事!

昨天做了一個煎蛋網妹子圖的爬蟲,個人感覺效果不錯。但是每次都得重複的敲辣麼多的程式碼(相比於Java或者其他語言的爬蟲實現,Python的程式碼量可謂是相當的少了),就封裝了一下!可以實現對批量網址以及單個網址的爬蟲!

核心程式碼

# coding:UTF-8

# 匯入我們需要的網路模組,正則表示式模組,以及產生隨機數的模組
import urllib2,urllib,re,random

# 根據傳入的URL網址,獲得該網址對應的全部的html頁面(純網頁,並沒有做任何的解析)
def getHtml(url,headers) :
    request = urllib2.Request(url,headers=headers)
    response = urllib2.urlopen(request)
    page = response.read()
    return
page # 根據之前獲得那個url對應的網頁資訊,將這張網頁裡面包含的所有的含有<img src=".+\.jpg"/>的url儲存到一個列表中 def getImageUrls(page): reg = r'src="(.+?\.jpg)"' imageReg = re.compile(reg) img_urls = re.findall(imageReg,page) return img_urls # 這是個測試的方法,並沒有實際的價值。列出來的目的只是為了紀念一下,最終功能實現的這個過程,僅此! # def getTotalImageUrls(original_url,headers):
# totalImageUrls = [] # for item in range(1980, 1990): # original_url += original_url + str(item) # page = getHtml(original_url,headers) # images_url = getImageUrls(page) # totalImageUrls.append(images_url) # return totalImageUrls # 根據給定的路徑,檔名,將指定的資料(這裡是一張圖片,是的。一張圖片)寫入到檔案中。需要注意的是每次都需要關閉file
def writeToFile(path,name,data): file = open(path+name,'wb') file.write(data) file.close() print name+" has been Writed Succeed!" # 下載圖片,並且呼叫剛才的 writeToFile(path,name,data): 函式。將圖片直接寫到對應的路徑下面 # 這裡藉助於一個random模組,為了產生圖片之間儘量不重複的檔名,以防止檔案的覆蓋或者出現其他的問題 def downloadImages(images_url,path,headers) : for i, item in enumerate(images_url): everypicture = getHtml(item,headers) # 此處下載之後的檔案使用了item來命名是為了避免圖片的覆蓋 writeToFile(path, str(i+random.randint(1,100000000)) + ".jpg", everypicture) # 提供單個url網址內圖片的下載 def singleImageDownload(outputPath,targeturl,headers) : originalurl = targeturl page = getHtml(originalurl,headers) images_url = getImageUrls(page) downloadImages(images_url,path,headers) # 提供批量下載的函式,對未成功下載的提示未成功下載語句 def batchImageDownload(outputPath, originalurl, headers, start, end): for item in range(2000, 4000): try: originalurl = 'http://bizhi.souutu.com/mnbz/' + str(item) + '.html' page = getHtml(originalurl) images_url = getImageUrls(page) downloadImages(images_url,headers) except: print str(item) + str(' web site cannot be spidered! Sorry!') continue # -------------------------------------------------------------------------------------------------- # 下面是我們的測試程式碼,僅僅拿單個url頁面做了個測試,親測好使 headers = { 'referer':'http://bizhi.souutu.com/mnbz/3712.html', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36' } path = "F:\\pachong\\bizhi\\" url = 'http://bizhi.souutu.com/mnbz/3712.html' singleImageDownload(path,url,headers)

後話

這裡並沒有使用類來進行封裝,沒有用BeautifulSoup的原因是我還沒學到

無奈.裝傻~ 
( ̄▽ ̄)~* ( ̄▽ ̄)" ╮(╯▽╰)╭ ╮( ̄▽ ̄)╭ 

但是咧,這在Python中是不妨礙滴,照樣爬嘛,(^__^) 嘻嘻……
我是新手,程式碼中可能有不恰當的地方,歡迎批評指正!