iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python如何爬取某网站原图作为壁纸
  • 911
分享到

python如何爬取某网站原图作为壁纸

2023-06-15 08:06:37 911人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍python如何爬取某网站原图作为壁纸,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!完整代码# -*- coding: utf-8 -*-""

这篇文章主要介绍python如何爬取某网站原图作为壁纸,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

完整代码

# -*- coding: utf-8 -*-"""Created on Wed May 26 17:53:13 2021@author: 19088"""import urllib.requestimport osimport pickleimport reimport randomimport sys#获取Http代理class getHttpAgents:    #初始化函数    def __init__(self):        self.attArray=self.__loadAgentList()        self.myagent=""        #注意 返回对象未进行解码    def openUrl(self,url,istry=1):        response=""        ip=""        if(0 != len(self.myagent.strip())):            ip=self.myagent        i=1        if not istry:            i=99        while i<100:            try:                #print(self.attArray)                if(0 == len(self.attArray) and 0==len(ip.strip())):                    req=urllib.request.Request(url)                    #设置访问头                    req.add_header("User-Agent", "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/90.0.4430.212 Safari/537.36")                    response=urllib.request.urlopen(req)                else:                    if(0 != len(self.attArray)):                        ip=random.choice(self.attArray)                    if(0 != len(self.myagent.strip())):                        ip=self.myagent                    print("以{}访问 {}".fORMat(ip,url))                    #设置代理                    proxy={"http":ip}                    #print(proxy)                    #定义一个代理字段                    proxy_support=urllib.request.ProxyHandler(proxy)                    #建立一个opener                    opener=urllib.request.build_opener(proxy_support)                    opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36")]                    #urllib.request.install_opener(opener)                       #获得网页对象                    response=opener.open(url)            except:                if not istry:                    print("{} 无法使用".format(ip))                else:                    print("第{}次尝试连接!".format(i))            else:                break;            finally:                i+=1        if 11==i and istry:            raise ValueError        if not response:            return         html=response.read()        #print(html)        return html    #检查代理池 去除掉不可用代理ip    def checkMyIpPool(self):        agentsResult=[]        agentList=self.attArray        for iter in agentList:            ip=iter            self.setMyIp(ip)            b=self.__getMyIp()            if not b:                #代理不能用                #agentList.pop(-iter)                pass            else:                agentsResult.append(ip)                #print(b)        #记录爬取过的可以使用的代理ip        self.__writeAgentList(agentsResult)        self.__setAgents(agentsResult)        self.setMyIp("")        #解析读取网页中所有的代理地址    def getAgents(self,html):        #print(html)        #匹配 ip地址 正则表达式        pattern = re.compile(r'(<td>)\s*((25[0-5]|2[0-4]\d|[0-1]\d\d|\d\d|\d)\.){3}(25[0-5]|2[0-4]\d|[0-1]\d\d|\d\d|\d)\s*</td>')        ipList=[]        ip=pattern.finditer(html)        for ipiter in ip:            ipText=ipiter.group()            ipGroup=re.search(r"((25[0-5]|2[0-4]\d|[0-1]\d\d|\d\d|\d)\.){3}(25[0-5]|2[0-4]\d|[0-1]\d\d|\d\d|\d)", ipText)            ipList.append(ipGroup.group())        #匹配 端口地址 正则表达式        portList=[]        pattern = re.compile(r'(<td>)\s*\d+\s*</td>')        port = pattern.finditer(html)         for portiter in port:            portText=portiter.group()            portGroup=re.search(r"\d+", portText)            portList.append(portGroup.group())        if(len(ipList) is not len(portList)):            print("注意: ip和端口参数不匹配!")            return        ipDict=dict(zip(ipList,portList))        agentList=[]        for key in ipDict:            agentList.append(key+":"+ipDict.get(key))          agentsResult=[]        for iter in agentList:            ip=iter            self.setMyIp(ip)            b=self.__getMyIp()            if not b:                #代理不能用                pass                #agentList.pop(-iter)            else :                agentsResult.append(ip)                self.__setAgents(agentsResult)                print("{} 可以使用".format(ip))        agentsResult.extend(self.attArray)          #记录爬取过的可以使用的代理ip        if(0==len(agentsResult)):            return        self.__writeAgentList(agentsResult)        self.__setAgents(agentsResult)        self.setMyIp("")        return agentList        def __setAgents(self,ipArray):        self.attArray=ipArray    def setMyIp(self,ip):        self.myagent=ip    #存储爬取过的ip代理    def __writeAgentList(self, agentList):         if os.path.exists("agent.pkl"):            os.remove("agent.pkl")          #每次重新生成 要不多次 dump需要多次 load        with open("agent.pkl.","wb") as f:            pickle.dump(agentList, f)        print("存储{}条代理".format(len(agentList)))        #加载之前存储过的ip代理    def __loadAgentList(self):        agentlist=[]        if not os.path.exists("agent.pkl"):            return agentlist        with open("agent.pkl","rb") as f:            agentlist=pickle.load(f)            print("加载{}条代理".format(len(agentlist)))            return agentlist    #获取当前使用的ip地址 类的内部方法 仅供内部调用    def __getMyIp(self,ip=""):        url="https://www.baidu.com/"        html=""        try:            html=self.openUrl(url,0).decode("utf-8")        except:            return         #匹配ip地址        #pattern = re.compile(r'((25[0-5]|2[0-4]\d|[0-1]\d\d|\d\d|\d)\.){3}(25[0-5]|2[0-4]\d|[0-1]\d\d|\d\d|\d)')        #groupIp=pattern.search(html)        #if groupIp:            #return groupIp.group()        else:            return html        #通过不同的网站去爬取代理    def crawlingAgents(self,index):        try:            url ="http://ip.yqie.com/ipproxy.htm"            print(url)            html=self.openUrl(url)             html=html.decode("utf-8")             self.setMyIp("")                                                #不指定ip 随机挑选一个作为代理            self.getAgents(html)        except Exception as e:            print("{} 爬取失败".format(url))                #一共搜集多少页        page=index                indexCur=1        while indexCur<=page:            try:                url=r"https://www.89ip.cn/index_{}.html".format(indexCur)                print(url)                self.setMyIp("")                 html=self.openUrl(url)                                               #不指定ip 随机挑选一个作为代理                html=html.decode("utf-8")                self.getAgents(html)            except Exception as e:                print("{} 爬取失败".format(url))            finally:                indexCur+=1                indexCur=1        while indexCur<=page:            try:                url=r"http://www.66ip.cn/{}.html".format(indexCur)                print(url)                self.setMyIp("")                 html=a.openUrl(url)                                               #不指定ip 随机挑选一个作为代理                html=html.decode("gb2312")                self.getAgents(html)            except Exception as e:                print("{} 爬取失败".format(url))            finally:                indexCur+=1                                          indexCur=1        while indexCur<=page:            try:                url=r"http://www.ip3366.net/?stype=1&page={}".format(indexCur)                print(url)                self.setMyIp("")                 html=a.openUrl(url)                                               #不指定ip 随机挑选一个作为代理                html=html.decode("gb2312")                self.getAgents(html)            except Exception as e:                print("{} 爬取失败".format(url))            finally:                indexCur+=1          indexCur=1        while indexCur<=page:            try:                url=r"http://www.kxdaili.com/dailiip/1/{}.html".format(indexCur)                print(url)                self.setMyIp("")                 html=a.openUrl(url)                                               #不指定ip 随机挑选一个作为代理                html=html.decode("utf-8")                self.getAgents(html)            except Exception as e:                print("{} 爬取失败".format(url))            finally:                indexCur+=1#下载图片封装类class downLoadPictures:    #构造函数    def __init__(self):        self.sorTKEy={}                                 #定义一个搜索关键字的字典        self.urlLoad=getHttpAgents()        self.bzmenuDict={}                              #分类信息 风景 美女 什么的分类        self.sortscreenDict={}                          #按照屏幕尺寸分类        self.littleSignDict={}                          #分类信息下面的小分类        pass            def getPictures(self,url):        #第一步 打开网页 读取page信息         pagerHtml=self.urlLoad.openUrl(url)        #第二步 获取 pageFolder 链接和各种分类信息 返回的是一堆folder链接的url        folderPictursUrl=self.readPages(pagerHtml).values()        if not folderPictursUrl:            print("获取图片集失败!")            return        for floderiterUrl in folderPictursUrl:            folderUrl=str("https://www.ivsky.com/")+floderiterUrl            folderHtml=self.urlLoad.openUrl(folderUrl)            #第三步 读取图片集 获取单个图片的链接地址 返回的是图片集里面的一堆文件url            pictursUrlDict=self.readFolders(folderHtml)            for iterPictureKey in pictursUrlDict:                fileName=iterPictureKey+".jpg"                pictureUrl=str("https://www.ivsky.com/")+pictursUrlDict.get(iterPictureKey)                                #读取图片页相关信息                pictureHtml=self.urlLoad.openUrl(pictureUrl)                picturDownUrl=self.readPictures(pictureHtml)                pictureDownHtml=self.urlLoad.openUrl(picturDownUrl)                if not pictureDownHtml:                    continue                #保存图片                with open(fileName,"wb+") as f:                    f.write(pictureDownHtml)                #提取匹配内容中的所有链接地址    def getHrefMap(self,html,isPicture=0,isFolder=0):        hrefDict={}        pattern=re.compile(r'<a\s*.*?\s*</a>',re.I)        if isPicture:            pattern=re.compile(r'<p>\s*?<a\s*.*?</p>',re.I)        hrefIter=pattern.finditer(html)        index=0        for iter in hrefIter:            hrefText=iter.group()            #匹配分类名字            pattern=re.compile(r'"\s*?>\s*?.*?</a>',re.I)            name=""            nameGroup=pattern.search(hrefText)            if nameGroup:                name=nameGroup.group()                if(5==len(nameGroup.group().replace(" ", ""))):                    pattern=re.compile(r'title=".*?"',re.I)                    nameGroup=pattern.search(hrefText)                    if nameGroup:                        name=nameGroup.group()[7:-1]                name=name[2:-4].replace(" ", '')            #匹配href            pattern=re.compile(r'href=".*?" rel="external nofollow" ',re.I)            url=""            urlGroup=pattern.search(hrefText)            if urlGroup:                url=urlGroup.group()[6:-1].replace(" ", '')            if isFolder:                index+=1                name+="_"+str(index)            hrefDict[name]=url        return hrefDict     #读取首页信息 包含各种分类的链接地址 以及图片集的地址集合       def readPages(self,html):        html=html.decode("utf-8")        #检索壁纸分类        #匹配 壁纸分类信息        pattern=re.compile(r'<ul\s*class="bzmenu".*?</ul>',re.I)        sortClassGroup=pattern.search(html)        if sortClassGroup:            sortMessage=sortClassGroup.group()            self.bzmenuDict=self.getHrefMap(sortMessage)            #print(self.bzmenuDict)        else:            print("匹配壁纸分类出错!")            return                 #匹配 按照屏幕大小分类        pattern=re.compile(r'<ul\s*class="sall_dd".*?</ul>',re.I)        sortClassGroup=pattern.search(html)        if sortClassGroup:            sortMessage=sortClassGroup.group()            self.sortscreenDict=self.getHrefMap(sortMessage)            #print(self.sortscreenDict)        else:            print("匹配屏幕尺寸分类失败!")            return                       #匹配 获取小分类        pattern=re.compile(r'<div\s*class="sline".*?</div>',re.I)        sortClassGroup=pattern.search(html)        if sortClassGroup:            sortMessage=sortClassGroup.group()            #print(sortMessage)            self.littleSignDict=self.getHrefMap(sortMessage)            #print(self.littleSignDict)        else:            print("匹配小分类失败")            return                               pictureDict={}        #匹配 图片集地址        pattern=re.compile(r'<ul\s*class="ali".*?</ul>',re.I)        sortClassGroup=pattern.search(html)        if sortClassGroup:            sortMessage=sortClassGroup.group()            pictureDict=self.getHrefMap(sortMessage,1)            #print(pictureDict)        else:            print("匹配图片集地址失败!")            return                 #print(html)        return pictureDict        #解析每个图片集合对应的图片集内容 解析出单个图片的链接地址    def readFolders(self,html):        if not html:            return        html=html.decode("utf-8")                #获取图片集里面每个图片的具体地址和名称         #匹配 获取小分类        pattern=re.compile(r'<ul\s*class="pli".*?</ul>',re.I)        sortClassGroup=pattern.search(html)        pictureUrlDict={}        if sortClassGroup:            sortMessage=sortClassGroup.group()            #print(sortMessage)            pictureUrlDict=self.getHrefMap(sortMessage,1,1)            #print(pictureUrlDict)        else:            print("匹配小分类失败")            return                                    return pictureUrlDict        #解析每个图片集合对应的图片集内容 解析出单个图片的链接地址    def readPictures(self,html):        if not html:            return                html=html.decode("utf-8")        #获取图片集里面每个图片的具体地址和名称         #匹配 获取小分类        pattern=re.compile(r'<div\s*class="pic".*?</div>',re.I)        sortClassGroup=pattern.search(html)        pictureUrl=""        if sortClassGroup:            sortMessage=sortClassGroup.group()            #匹配href            pattern=re.compile(u"src='.*?'",re.I)            url=""            urlGroup=pattern.search(sortMessage)            if urlGroup:                url=urlGroup.group()[5:-1].replace(" ", '')                        url=url.replace('img-pre', 'img-picdown')            url=url.replace('pre', 'pic')            url=str("https:")+url            #print(sortMessage)            pictureUrlDict=url            #print(url)        else:            print("匹配小分类失败")            return                                    return pictureUrlDict                class UrlUser:        def __init__(self):        self.agent=getHttpAgents()        self.downPicture=downLoadPictures()           #下载图片调用函数    def downPictures(self):        #url="https://www.ivsky.com/bizhi"        #b.getPictures(url)        #确定保存路径              dirPath=input("请输入保存路径:")        if not os.path.exists(dirPath):            os.mkdir(dirPath)        if not os.path.isdir(dirPath):            print("savePath is wrong!")            sys.exit()        os.chdir(dirPath)                                       #切换工作目录         #url=r"https://www.ivsky.com/bizhi/nvxing_1920x1080/index_{}.html"        page=input("爬取前多少页的图片?\n")        indexRe = re.search(r"\d+", page)        if(not indexRe):            print("输入页数有误!")        indexRe=int(indexRe.group())        indexCur=1        while indexCur<=indexRe:            try:                #注意 爬取什么类型的图片可以根据不同的网址进行设计 下载类里面已经读取了所有分类对应的地址 有兴趣可以自己完善                url=r"https://www.ivsky.com/bizhi/nvxing_1920x1080/index_{}.html".format(indexCur)                print(url)                self.downPicture.getPictures(url)            except:                print("打开出错!")                pass            finally:                indexCur+=1    #爬取代理    def downAgents(self):        page=input("爬取前多少页的代理?\n")        indexRe = re.search(r"\d+", page)        if(not indexRe):            print("输入页数有误!")            return        indexRe=int(indexRe.group())            self.agent.crawlingAgents(indexRe)        # 检查当前代理池是否可以    def checkPool(self):        self.agent.checkMyIpPool()         if __name__ == "__main__":    print("*"*20)    print("1.爬取代理\n")    print("2.检查代理\n")    print("3.爬取图片")       print("*"*20)    mode=input("请输入数字选择处理模式:\n")    indexRe = re.search(r"\d+", mode)    if(not indexRe):        print("输入页数有误!")        sys.exit()    indexRe=int(indexRe.group())    #实例化一个对象    uesrObj=UrlUser()        if 1 == indexRe:        uesrObj.downAgents()    elif 2 == indexRe:        uesrObj.checkPool()    elif 3 == indexRe:        uesrObj.downPictures()    else:        print("模式选择错误!")        sys.exit()    print("爬取完毕!")

效果图

python如何爬取某网站原图作为壁纸

以上是“Python如何爬取某网站原图作为壁纸”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网Python频道!

--结束END--

本文标题: python如何爬取某网站原图作为壁纸

本文链接: https://www.lsjlt.com/news/278935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python爬取某网站原图作为壁纸
    不得不说 python真是一个神奇的东西,学三天就能爬网站 真香 完整代码 # -*- coding: utf-8 -*- """ Created on Wed May 26 1...
    99+
    2024-04-02
  • python如何爬取某网站原图作为壁纸
    这篇文章主要介绍python如何爬取某网站原图作为壁纸,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!完整代码# -*- coding: utf-8 -*-""...
    99+
    2023-06-15
  • python如何爬取壁纸网站
    这篇文章主要介绍python如何爬取壁纸网站,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本次爬虫用到的网址是:http://www.netbian.com/index.htm: 彼岸桌面.里面有很多的好看壁纸,而且...
    99+
    2023-06-14
  • python 爬取壁纸网站的示例
    目录完整代码如下运行部分展示结果如下:本次爬虫用到的网址是: http://www.netbian.com/index.htm: 彼岸桌面.里面有很多的好看壁纸,而且都是可以下载高清...
    99+
    2024-04-02
  • 怎么在python中利用多线程爬取网站壁纸
    本篇文章给大家分享的是有关怎么在python中利用多线程爬取网站壁纸,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python主要用来做什么Python主要应用于:1、Web开...
    99+
    2023-06-06
  • 用python爬取某个图片网站的图片
    爬取单张图片 # 爬取单张图片import requests # 导入requests库url = "https://file.lsjlt.com/upload/f/202309/12/54vwhbwy2re.jpg" # 图片地址re...
    99+
    2023-09-12
    python 爬虫
  • 如何Python爬取5K分辨率高清桌面壁纸
    本篇文章为大家展示了如何Python爬取5K分辨率高清桌面壁纸,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言相信大家都很需要哪些既好看又能符合自己当时的心情的高清壁纸,很多时候壁纸反应我们当时的...
    99+
    2023-06-02
  • 如何使用Python爬虫爬取网站图片
    这篇文章主要介绍了如何使用Python爬虫爬取网站图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。此次python3主要用requests,解析图片网址主要用beautif...
    99+
    2023-06-22
  • 如何用Python爬虫爬取美剧网站
    如何用Python爬虫爬取美剧网站,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。爬虫爬取美剧网站!【前言】一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打...
    99+
    2023-06-02
  • python如何爬取网页图片
    要使用Python爬取网页图片,可以使用requests库来发送HTTP请求,然后使用beautifulsoup库或者正则表达式来解...
    99+
    2023-08-20
    python
  • 如何利用Python爬虫爬取网站音乐
    小编给大家分享一下如何利用Python爬虫爬取网站音乐,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体实现引入发送网络请求的第三方库import re...
    99+
    2023-06-15
  • Python如何实现爬取某站视频弹幕并绘制词云图
    这篇文章主要为大家展示了“Python如何实现爬取某站视频弹幕并绘制词云图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现爬取某站视频弹幕并绘制词云图”这篇文章吧。前言[课 题...
    99+
    2023-06-22
  • python如何爬取新闻门户网站
    这篇文章主要介绍了python如何爬取新闻门户网站,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WE...
    99+
    2023-06-14
  • 如何使用python爬取整个网站
    要使用Python爬取整个网站,可以使用以下步骤:1. 导入所需的库,例如`requests`和`BeautifulSoup`。``...
    99+
    2023-08-14
    python
  • python中如何爬取汽车之家网站上的图片
    这篇文章主要介绍了python中如何爬取汽车之家网站上的图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python的数据类型有哪些python的数据类型:1. 数字类型,...
    99+
    2023-06-14
  • 如何用Python爬取全网baisi趣图
    今天就跟大家聊聊有关如何用Python爬取全网baisi趣图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言baisi里面有各种各样的趣图,搞笑视频,搞笑GIF图,搞笑段子,Pyt...
    99+
    2023-06-02
  • Python如何爬取觅知网素材图片
    这篇文章主要讲解了“Python如何爬取觅知网素材图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python如何爬取觅知网素材图片”吧!【一、项目背景】   ...
    99+
    2023-06-21
  • python如何爬取影视网站下载链接
    这篇文章主要介绍python如何爬取影视网站下载链接,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!运行效果导入模块import requests,refrom requests.cookies&n...
    99+
    2023-06-15
  • 如何利用python多线程爬取天气网站图片并保存
    目录1.1 题目1.2 思路 1.2.1 发送请求1.2.2 解析网页 1.2.3 获取结点 1.2.4 数据保存 (单线程) 1.2.4 数据保存 (多线程)总结1.1 题目 指定...
    99+
    2024-04-02
  • Pyspider框架中Python如何爬取V2EX网站帖子
    Pyspider框架中Python如何爬取V2EX网站帖子,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。背景:PySpider:一个国人编写的强大的网络爬虫系统并带有强大的...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作