zoukankan      html  css  js  c++  java
  • 使用webdriver+urllib下载哈哈网所有图片

    上次刚刚用webdriver拔取了最近看的小说,并下载到了本地,但是心里并不满足,于是就想下载笑话网站上的图片,由于自动化测试用的selenium库里的webdriver能比较准确的定位元素,并且获取元素的属性,

    webdriver定位元素:http://blog.csdn.net/ccggaag/article/details/72829629

    webdriver获取元素属性:driver.get_attribute("元素标签的属性字段")

    并且webdriver可以获取到一组符合条件的数据,正好可以定位这一页的所有符合条件的元素,这样我可以通过定位所有的img标签来获取所有图片的地址属性src,但是我有下载地址了,怎么下载呢,我最近接触到了正统的爬虫库,正好有一个方法可以通过url地址来下载文件到本地,所以我就基于webdriver和urllib这两个库来下载图片啦。


    一:准备工作

    首先,我要安装好webdriver,点我配置webdriver。然后呢,要引入一个库:urllib,所以我们在cmd的命令行中通过pip来导入
    pip install urllib
    然后我们主要是通过urlretrieve()方法传入下载地址和保存地址,然后就能把图片保存在本地啦,所以思路明确了,实现起来就好办了

    二:代码做到的功能介绍

    我的代码主要实现了哈哈网图片的下载,并且把JPG和GIF图片分别保存得意,并把宝贵的图片地址资源用日志记录下来,这样以后可以直接通过图片地址来下载图片了

    三:代码实现

    log.py封装好的日志模块,到时候直接导入引用就好了

    import logging
    import sys
    def logger():
            """ 获取logger"""
            logger = logging.getLogger()
            
            if not logger.handlers:
                # 指定logger输出格式
                formatter = logging.Formatter('%(asctime)s %(levelname)-8s: %(message)s')
                # 文件日志
                file_handler = logging.FileHandler("haha.log")
                file_handler.setFormatter(formatter)  # 可以通过setFormatter指定输出格式
                # 控制台日志
                console_handler = logging.StreamHandler(sys.stdout)
                console_handler.formatter = formatter  # 也可以直接给formatter赋值
                # 为logger添加的日志处理器
                logger.addHandler(file_handler)
                logger.addHandler(console_handler)
                # 指定日志的最低输出级别,默认为WARN级别
                logger.setLevel(logging.INFO)
    
            return logger


    然后就是实现下载的模块了,hahaDemo.py
    from selenium import webdriver
    import time
    from urllib.request import urlretrieve
    import logs
    
    if __name__ == "__main__":
            driver =webdriver.Chrome()
            log = logs.logger()
            gifNumber=0
            jpgn=0
            png=0
            pages = 0
            while pages <5102:#这个5102是看你具体图片有多少页,我懒得写获取总页数的方法了,直接写数字
                try:          
                    url = "http://www.haha.mx/pic/new/%s"%pages
                    print(url)
                    driver.get(url)
                    time.sleep(5)
                    pages=pages+1
                    eles = driver.find_elements_by_tag_name("img")
                    for i in eles:
                                if str(i.get_attribute("src")).find("gif")!=-1:#判断地址中是否包含gif字段
                                    imgUrl = str(i.get_attribute("src"))
                                    name =str(i.get_attribute("alt"))
                                    log.info(imgUrl)
                                    urlretrieve(imgUrl,'img/gif/%s.gif' %(str(gifNumber)+name))
                                    gifNumber=gifNumber+1
                                    print("第%s张gif图片"%gifNumber)
                                elif str(i.get_attribute("src")).find("jpg")!=-1::#判断地址中是否包含jpg字段
                                    imgUrl = str(i.get_attribute("src"))
                                    name =str(i.get_attribute("alt"))
                                    log.info(imgUrl)
                                    urlretrieve(imgUrl,'img/jpg/%s.jpg' %(str(jpgn)+name) )
                                    jpgn=jpgn+1
                                    print("第%s张jpg图片"%jpgn)
                                else:
                                    log.info("wrong")
                except :
                    print(Exception)
                    driver.get(url)


    注意啊,我创建了一个img的文件夹,里面分别有jpg和gif的子文件夹用来保存数据,并且,,,记得你的硬盘要足够大!!!!!!全部保存完要100G以上
  • 相关阅读:
    QR code 乱谈(一)
    用JAVA实现数字水印(可见)
    ctf总结
    Unix/Linux常用命令
    C语言概述
    C语言发发展历史
    为什么要学习C语言
    计算机应用领域
    计算机发展趋势
    如何学习计算机
  • 原文地址:https://www.cnblogs.com/CCGGAAG/p/7800338.html
Copyright © 2011-2022 走看看