zoukankan      html  css  js  c++  java
  • Python爬去百思不得其解的图片(VS2017)

    一、引用的命名空间(C#用多了喜欢称为命名空间)(我没有休息主要是爬取得图片太少了,理论上应该休息一下)

    import re 
    import requests
    import threading#多线程
    import time
    from tkinter import *
    from tkinter.scrolledtext import ScrolledText   
    import urllib.request

    二、变量

    id=1#图片的个数
    a=1#页数
    url_name=[]

    三、获取图片的名称和网址函数

    def get(a):
        hd={'User-Agent':'Mozilla/5.0 (Windows NT 10.0;) Gecko/20100101 Firefox/60.0'}
        url='http://www.budejie.com/pic/'+str(a)
        print(url)
        var1.set('已经获取了%s页的图片'%(a))
        html=requests.get(url,headers=hd).text
        #<div class="j-item">(.*?)</div>
        # <img src="http://mpic.spriteapp.cn/x/640x400/ugc/2018/05/31/5b1014a66bc33_1.jpg" title="那些失败的纹身,都像闹着玩似的" alt="那些失败的纹身,都像闹着玩似的">
        url_content=re.compile(r'(<div class="j-r-list-c-img">.*?</div>)',re.S)#匹配换行符
        url_contents=re.findall(url_content,html)
        print("****************华丽的分割线*******************")
        for i in url_contents:
            url_reg=r'data-original="(.*?)" title=".*?" alt=".*?"/>'
            SS=re.compile(url_reg,re.S)
            url_item=re.findall(SS,i)
            if url_item:#如果图片存在匹配名字
                name_reg=re.compile(r'title="(.*?)"',re.S)
                name_content=re.findall(name_reg,i)
                #print(name_content) 
                for i,k in zip(url_item,name_content):
                    url_name.append([i,k])
        return url_name 

    四、写入文件夹函数

    def write():
        global id
        global a
        while id<100:
               url_name=get(a)#调用获取图片+名字
               for i in url_name: 
                   urllib.request.urlretrieve(i[0],'C:\Users\你若成风618\Desktop\picture\%s.jpg' %(i[1]))#下载.encode('gbk')
                   text.insert(END,str(id)+'.'+i[0]+'
    '+i[1]+'
    ')
                   url_name.pop(0)
                   id+=1
               a+=1
        
        var1.set("图片爬取成功")

    五、线程函数

    def start():
        th=threading.Thread(target=write)
        th.start()#运行线程

    六、窗口的创建

    root=Tk()#实例化一个变量
    root.title('图片爬虫')
    root.geometry()
    text=ScrolledText(root,font=('微软雅黑',10))
    text.grid()#实现布局方法
    button=Button(root,text='开始爬取',font=('微软雅黑',10),command=start)
    button.grid()
    var1=StringVar()#通过tk方法绑定一个变量
    label=Label(root,font=('微软雅黑',10),fg='red',textvariable=var1)
    label.grid()
    var1.set('准备爬取.........')
    root.mainloop()#创建窗口指令

    七、汇总代码

    import re 
    import requests
    import threading#多线程
    import time
    from tkinter import *
    from tkinter.scrolledtext import ScrolledText   
    import urllib.request
    url_name=[]
    def get(a):
        hd={'User-Agent':'Mozilla/5.0 (Windows NT 10.0;) Gecko/20100101 Firefox/60.0'}
        url='http://www.budejie.com/pic/'+str(a)
        print(url)
        var1.set('已经获取了%s页的图片'%(a))
        html=requests.get(url,headers=hd).text
        #<div class="j-item">(.*?)</div>
        # <img src="http://mpic.spriteapp.cn/x/640x400/ugc/2018/05/31/5b1014a66bc33_1.jpg" title="那些失败的纹身,都像闹着玩似的" alt="那些失败的纹身,都像闹着玩似的">
        url_content=re.compile(r'(<div class="j-r-list-c-img">.*?</div>)',re.S)#匹配换行符
        url_contents=re.findall(url_content,html)
        print("****************华丽的分割线*******************")
        for i in url_contents:
            url_reg=r'data-original="(.*?)" title=".*?" alt=".*?"/>'
            SS=re.compile(url_reg,re.S)
            url_item=re.findall(SS,i)
            if url_item:#如果图片存在匹配名字
                name_reg=re.compile(r'title="(.*?)"',re.S)
                name_content=re.findall(name_reg,i)
                #print(name_content) 
                for i,k in zip(url_item,name_content):
                    url_name.append([i,k])
        return url_name 
    id=1#图片函数
    a=1#页数
    def write():
        global id
        global a
        while id<100:
               url_name=get(a)#调用获取图片+名字
               for i in url_name: 
                   urllib.request.urlretrieve(i[0],'C:\Users\你若成风618\Desktop\picture\%s.jpg' %(i[1]))#下载.encode('gbk')
                   text.insert(END,str(id)+'.'+i[0]+'
    '+i[1]+'
    ')
                   url_name.pop(0)
                   id+=1
               a+=1
        
        var1.set("图片爬取成功")
    
    def start():
        th=threading.Thread(target=write)
        th.start()#运行线程
    root=Tk()#实例化一个变量
    root.title('图片爬虫')
    root.geometry()
    text=ScrolledText(root,font=('微软雅黑',10))
    text.grid()#实现布局方法
    button=Button(root,text='开始爬取',font=('微软雅黑',10),command=start)
    button.grid()
    var1=StringVar()#通过tk方法绑定一个变量
    label=Label(root,font=('微软雅黑',10),fg='red',textvariable=var1)
    label.grid()
    var1.set('准备爬取.........')
    root.mainloop()#创建窗口指令
    

    八、效果图

  • 相关阅读:
    [Java]内部类
    [Java]项目经验之谈
    [IDE]Netbeans
    [HTML5游戏开发]开发者如何真正的面向HTML5平台开发游戏?
    [HTML5游戏开发]两款很棒的 HTML5 游戏开发工具
    [HTML5游戏开发]HTML5游戏让你惊喜吗?
    How To Design A Mobile Game With HTML5
    [WebSimpleDB]HTML5之IndexedDB使用详解
    [HTML5]WAI-ARIA介绍
    [MiniPro]Android GPS-从上到下整个框架剖析与案例解说
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752388.html
Copyright © 2011-2022 走看看