Python爬蟲! 單爬,批量爬,這都不是事!
阿新 • • 發佈:2019-02-14
昨天做了一個煎蛋網妹子圖的爬蟲,個人感覺效果不錯。但是每次都得重複的敲辣麼多的程式碼(相比於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中是不妨礙滴,照樣爬嘛,(^__^) 嘻嘻……
我是新手,程式碼中可能有不恰當的地方,歡迎批評指正!