使用正則編寫簡單的爬蟲爬取某網站的圖片

weixin_34236497發表於2018-06-06

思路:簡單的爬蟲實際上主要是通過檢視頁面原始碼,檢視圖片標籤的表示格式,然後在編寫正則進行匹配。

import urllib.request
import codecs
import hashlib
import time
import re
# 使用codecs實現檔案自動編碼
def parseHtml(url):
    webPage = urllib.request.urlopen(url)
    data = webPage.read()
    data = data.decode('utf-8')
    reg = r'(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')' 
    htmlre = re.compile(reg)
    htmllist = re.findall(htmlre, data)
    getImg(data)
    return set(htmllist)
    
# 獲得圖片地址
def getImg(html):
        reg = r'src="(http://*.*?\.jpg)"'        # 定義一個正則來匹配頁面當中的圖片
        imgre = re.compile(reg)         # 為了讓正則更快,給它來個編譯
        #這個時候做個測試,把匹配的資料都給列印出來
        imglist = re.findall(imgre, html)                       # 通過正則返回所有資料列表
        # 把這個地址一個一個的拿下來進行下載
        x = 0   
        for imgurl in imglist:
            m=hashlib.md5()
            m.update(url.encode('utf-8'))
            m.update(str(time.time()).encode('utf-8'))
            filename=r'%s.jpg'% m.hexdigest()
            try:
                urllib.request.urlretrieve(imgurl,'C:/Users/GuiRunning/Desktop/hello/%s' %(filename))
            except BaseException as e:
                continue
            x+=1
        print('爬蟲完成,爬到%s張圖片' %(x))
url='http://www.nipic.com/photo'    
list=parseHtml(url)
for item in list:
    print(item)
    if(item.find("http://") == -1):
        item='http://www.nipic.com'+item        
        try:
            parseHtml(item)
        except urllib.error.HTTPError as e:
            continue
print('爬蟲結束')

爬取結果:


4051767-971de00387bec8bd.png
image.png

相關文章