Python爬虫! 单爬,批量爬,这都不是事!
生活随笔
收集整理的這篇文章主要介紹了
Python爬虫! 单爬,批量爬,这都不是事!
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
昨天做了一個煎蛋網(wǎng)妹子圖的爬蟲,個人感覺效果不錯。但是每次都得重復(fù)的敲辣么多的代碼(相比于Java或者其他語言的爬蟲實現(xiàn),Python的代碼量可謂是相當(dāng)?shù)纳倭?#xff09;,就封裝了一下!可以實現(xiàn)對批量網(wǎng)址以及單個網(wǎng)址的爬蟲!
核心代碼
# coding:UTF-8# 導(dǎo)入我們需要的網(wǎng)絡(luò)模塊,正則表達式模塊,以及產(chǎn)生隨機數(shù)的模塊 import urllib2,urllib,re,random# 根據(jù)傳入的URL網(wǎng)址,獲得該網(wǎng)址對應(yīng)的全部的html頁面(純網(wǎng)頁,并沒有做任何的解析) def getHtml(url,headers) :request = urllib2.Request(url,headers=headers)response = urllib2.urlopen(request)page = response.read()return page# 根據(jù)之前獲得那個url對應(yīng)的網(wǎng)頁信息,將這張網(wǎng)頁里面包含的所有的含有<img src=".+\.jpg"/>的url存儲到一個列表中 def getImageUrls(page):reg = r'src="(.+?\.jpg)"'imageReg = re.compile(reg)img_urls = re.findall(imageReg,page)return img_urls# 這是個測試的方法,并沒有實際的價值。列出來的目的只是為了紀(jì)念一下,最終功能實現(xiàn)的這個過程,僅此! # 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# 根據(jù)給定的路徑,文件名,將指定的數(shù)據(jù)(這里是一張圖片,是的。一張圖片)寫入到文件中。需要注意的是每次都需要關(guān)閉file def writeToFile(path,name,data):file = open(path+name,'wb')file.write(data)file.close()print name+" has been Writed Succeed!"# 下載圖片,并且調(diào)用剛才的 writeToFile(path,name,data): 函數(shù)。將圖片直接寫到對應(yīng)的路徑下面 # 這里借助于一個random模塊,為了產(chǎn)生圖片之間盡量不重復(fù)的文件名,以防止文件的覆蓋或者出現(xiàn)其他的問題 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網(wǎng)址內(nèi)圖片的下載 def singleImageDownload(outputPath,targeturl,headers) :originalurl = targeturlpage = getHtml(originalurl,headers)images_url = getImageUrls(page)downloadImages(images_url,path,headers)# 提供批量下載的函數(shù),對未成功下載的提示未成功下載語句 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的原因是我還沒學(xué)到
無奈.裝傻~ ( ̄▽ ̄)~* ( ̄▽ ̄)" ╮(╯▽╰)╭ ╮( ̄▽ ̄)╭但是咧,這在Python中是不妨礙滴,照樣爬嘛,(^__^) 嘻嘻……
我是新手,代碼中可能有不恰當(dāng)?shù)牡胤?#xff0c;歡迎批評指正!
總結(jié)
以上是生活随笔為你收集整理的Python爬虫! 单爬,批量爬,这都不是事!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5跨域通讯之postMessag
- 下一篇: Linux压缩解压缩命令