爬取网上的图片

from urllib.request import urlopen
from urllib import request
import re
import requests


def open(url):
    """
    将网站内容转换成字符串
    :param url:
    :return: 字符串
    """
    u = urlopen(url).read().decode('gbk')  # 将网站打开,并将网页内的内容转换成gbk类型的字符串
    return u


def gaoqing(urlname, url):
    """
    找到高清图片的地址

    :param urlname: 文件的名称
    :param url: 图片的查看地址
    :return:
    """
    url = f"http://pic.netbian.com{url}"  # 将图片的地址和官网拼接成图片的查看图片的地址
    u = urlopen(url).read().decode('gbk')  # 将网站内容转换成字符串
    a = re.search('<img src="(?P<pic>.*?)" data-', u)  # 利用正则找出图片的具体地址
    path = 'http://pic.netbian.com' + a.group(1)  # 拼接
    s = pic_file(urlname, path)  # 下载,图片


def pic_file(jpg_name, path):
    request.urlretrieve(path, f'./图片存放/{jpg_name}.jpg')  # 下载图片,保存到./图片存放目录下
    return True


def com_index(str_path, num):
    cod = {}
    com = re.search('<ul class="clearfix">.*?</ul>', str_path, re.S)
    #  查找页面内的图片地址存放区域
    if num == 1:
        # 第一页
        com_url = re.compile(r'<li><a href="(?P<url>.*?)" title="(?P<title>.*?)" target=', re.S)
        # 查找图片的查看地址

    elif num > 1:
        # 不是第一页时
        com_url = re.compile(r'<li><a href="((?P<url>.*?))".*?alt="(?P<title>.*?)" /><b>',
                             # 查找图片的查看地址,和图片名称
                             re.S)
    com_url = com_url.finditer(com.group())  # 将查找到的图片查看地址和名称,利用finditer
    for i in com_url:
        cod[i.group('title')] = i.group('url')  # 将 写入到字典返回。
    return cod


for i in range(230, 1136):
    # 网站一共有1135页,
    cod = {}
    try:
        if i == 1:
            url = 'http://pic.netbian.com/index.html'  # 首页地址
        elif i > 1:
            url = f'http://pic.netbian.com/index_{i}.html'  # 其他页的地址
        a = open(url)   # 获得网页内容的字符串
        cod = com_index(a, i) # 获得网页中图片的查看地址,和图片名称对应的字典
        for k, i in cod.items():
            gaoqing(k, i)     # 获得图片的具体地址,并下载 
    except:
        continue

 

posted @ 2019-03-27 21:41  msKk1  Views(138)  Comments(0Edit  收藏  举报