使用webdriver+urllib下载哈哈网所有图片

news/2024/7/19 10:28:21 标签: webdriver, 爬虫, selenium, 图片下载, urllib

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

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

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

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


一:准备工作

首先,我要安装好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以上

http://www.niftyadmin.cn/n/1431752.html

相关文章

使用python删除本地夹里重复的文件

上次的博文主要说了从网上下载图片&#xff0c;于是我把整个笑话网站的图片都拔下来了&#xff0c;但是在拔取的图片中有很多重复的&#xff0c;比如说页面的其他图片、重复发布的图片等等。所以我又找了python的一些方法&#xff0c;写了一个脚本可以删除指定文件夹里重复的图…

小printf的故事:什么是真正的程序员?

第一章 &#xff08;推荐看完整篇文章&#xff0c;再回过头看一遍第一章&#xff09; 出处&#xff1a;http://www.cnblogs.com/xueweihan/ 我非常幸运出生在一个电脑和电子游戏还没有普遍的时代。所以我可以和我的小伙伴们一起玩耍&#xff0c;同时发明属于我们的游戏。 我…

web自动化测试第3步:元素的基础操作和浏览器基础操作

上一节&#xff0c;我们了解了如何定位元素&#xff0c;其实也有涉及对于元素的操作&#xff0c;这一节我们就详细的介绍一下对于元素的操作和对于浏览器的一些操作 1.对于元素的基础操作&#xff1a; clear&#xff08;&#xff09;&#xff1a;清除输入框内的文本 send_ke…

web自动化测试第4步:页面元素信息(属性)的获取

上一节讲到对于元素的操作和浏览器的常用操作如何通过代码实现&#xff0c;这次来学习如何通过定位元素&#xff0c;来获取元素的信息&#xff08;元素属性、信息等&#xff09; 1.获取元素相关的信息 size&#xff1a;元素的大小 text&#xff1a;元素内文本 is_displayed…

web自动化测试第5步:浏览器/页面信息的获取

上一节讲到了如何利用获得的元素来获取元素的信息&#xff0c;这次来说一下如何获取浏览器相关的信息&#xff0c;主要是页面的路径&#xff1a;URL和页面的标题&#xff1a;title比较常用一定要记住 1.获取页面相关信息的方法 current_url :当前页面的URL路径 title&#x…

web自动化测试第6步:模拟鼠标操作(ActionChains)

在日常的测试中&#xff0c;经常会遇到需要鼠标去操作的一些事情&#xff0c;比如说悬浮菜单、拖动验证码等&#xff0c;这一节我们来学习如何使用webdriver模拟鼠标的操作 首页模拟鼠标的操作要首先引入ActionChains的包 from selenium.webdriver.common.action_chains impor…

web自动化测试第7步:模拟键盘事件(Keys)

对于模拟键盘事件&#xff0c;我们之前的文章中已经有了一些了解&#xff0c;比如基础操作send_keys()方法输入任意值、鼠标事件key_down&#xff08;&#xff09;、key_up&#xff08;&#xff09;等&#xff0c;这一节呢&#xff0c;我们也比较简单&#xff0c;我们专门来讲一…

webdriver浏览器版本驱动对应以及下载(火狐-谷歌-IE-edge-safari浏览器)

写在前面&#xff1a; 对于webdriver和各个浏览器的版本的对应&#xff0c;我最近发现浏览器驱动的对应在selenium库的源码里都有提及&#xff0c;路径是&#xff1a;python>site-packages>selenium>webdriver>浏览器名称的文件夹>service.py中&#xff0c;里面…