Python学习 爬取图片并下载到本地(5)

看了前面的几步的同学,在这里附上一个爬取图片并下载到本地的方法。同样采用了字典的遍历。

# 这里是为了下载图片
# 导包
import requests
import urllib.request  # 下载
import os  # 创建
from pyquery import PyQuery as pq
import time  # 延迟获取
# 给请求指定一个请求头来模拟chrome浏览器
# headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
# 在这里定义n是为了规范图片的名字便于后边调用
n = 0

'''
定义一个可以获取页面数据以及提取网页源码的函数
定义一个可以获取href属性值的函数
定义一个可以查找指定元素并提取文本内容的函数
'''


def get_html(url):
    # 获取页面内容)(获取数据)
    r = requests.get(url)
    # 提取网页源代码
    html = r.text
    if r.status_code == 200:
        return html
    else:
        return "error"


def get_attr(html, sel, attr_name):
    # 使用pyquery解析网页,生成pyquery对象
    doc = pq(html)
    link = doc(sel)
    # 找到href属性值
    thunder_link = link.attr(attr_name)
    return thunder_link


def get_text(html, sel):
    doc = pq(html)
    # 4. 使用选择器在pyquery中找到指定的元素
    t = doc(sel)
    # 5. 在找到元素中,提取文本内容
    title = t.text()
    return title


# 打开图片所在的文件夹
file_path = 'R:\python\图片'
# url固定的部分
url = "https://xs.sogou.com/0_0_0_0_heat/?pageNo="
for i in range(1, 6):
    # 字符串拼接
    url_new = url + str(i)
    html_list = get_html(url_new)
    # 使用pyquery解析网页,生成pyquery对象
    doc = pq(html_list)
    # 找到所需要的元素所在位置
    items = doc('.wrapper .box-center .sx-ret .filter-ret .fl .cover').items()
    for item in items:
        gif = {
                'img': 'https:'+item.find('img').attr('src')
            }
    # 运用字典的遍历去找找到图片链接,注意这里为什么不能直接查找呢?因为图片链接在img标签里,直接查找查找不到。
    # 加了个print来判断获取的图片链接是否正确
        print("gif['img']: ", gif['img'])
        # 这里运用try来检测异常
        # 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
        # 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
        # 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
        try:
            if not os.path.exists(file_path):
                os.makedirs(file_path)  # 如果没有这个path则直接创建
            file_suffix = os.path.splitext(gif['img'])[1]  # 获得图片后缀
            print(file_suffix)  # 打印后缀jpg or png
            n += 1  # 这里让n+1,注意 python中并不存在n++
            # 对下载的图片进行命名.format()这个方法的用法是把字符串里面的{}字符,按次序一一替换成 format() 接受的所有参数。
            filename = '{}{}'.format(n, file_suffix)  # 命名方式为 n+图片后缀
            print(filename)  # 打印图片名字来查看是否正确执行上一行的命令
            urllib.request.urlretrieve(gif['img'], filename=filename)  # 下载图片到指定文件夹
        # 如果遇到文件末尾引发的异常,输出1
        except IOError as e:
            print(1, e)
        # 如果遇到打开异常,输出2
        except Exception as e:
            print(2, e)
# 暂停8s
time.sleep(8)

你可能感兴趣的:(学习记录)