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]+'\n'+i[1]+'\n')
               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]+'\n'+i[1]+'\n')
               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()#创建窗口指令

八、效果图

 

posted @ 2018-06-11 20:47  HPUGIS  阅读(142)  评论(0编辑  收藏  举报