使用正则编写简单的爬虫爬取某网站的图片

思路:简单的爬虫实际上主要是通过查看页面源代码,查看图片标签的表示格式,然后在编写正则进行匹配。

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('爬虫结束')

爬取结果:


image.png

你可能感兴趣的:(使用正则编写简单的爬虫爬取某网站的图片)