Python简易 爬虫+图形化界面(2020/7/5已更新)

一.简单爬取页面内容

所需要库:thinter,python3自带

代码:

from tkinter import *
import re
import requests

def input1():
     link = str(inp1.get())
     headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}
     r = requests.get(link, headers=headers)
     html = r.text
     post = re.findall('<span class="post-view-count">(.*?)</span>', html)
     txt.insert(END, post)  # 追加显示运算结果
     inp1.delete(0, END)

root = Tk()
root.geometry('460x240')
root.title('爬取阅读数界面')

lb1 = Label(root, text='请输入需要爬取的网页')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1 = Entry(root)
inp1.place(relx=0.1, rely=0.2, relwidth=0.8, relheight=0.1)

# 方法

btn1 = Button(root, text='开始爬取', command=input1)
btn1.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.2)

# 在窗体垂直自上而下位置60%处起,布局相对窗体高度40%高的文本框
txt = Text(root)
txt.place(rely=0.6, relheight=0.4)

root.mainloop()

相关参数,参考:https://www.jianshu.com/p/91844c5bca78

 

原理:爬取自己博客的阅读数,给爬虫一个交互界面,简单的用tkinter做到接收输入,按钮调用,最后输出的结果

实现结果因网页结构而异

 

效果:

 

二.图片的爬取

代码:

from tkinter import *
from urllib.request import urlopen    #注意这里的写法urllib不能直接写为import urllib要加上它的对象request
from bs4 import BeautifulSoup
import re
import time
import urllib.request

def input1():
    url = str(inp1.get())
    html = urllib.request.urlopen(url).read().decode('utf-8')
    soup = BeautifulSoup(html, 'html.parser')
    # 是指定Beautiful的解析器为“html.parser”还有BeautifulSoup(markup,“lxml”)BeautifulSoup(markup, “lxml-xml”) BeautifulSoup(markup,“xml”)等等很多种
    # 用Beautiful Soup结合正则表达式来提取包含所有图片链接(img标签中,class=**,以.png结尾的链接)的语句
    # find()查找第一个匹配结果出现的地方,find_all()找到所有匹配结果出现的地方
    # re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。
    links = soup.find_all('img', "", src=re.compile('.*(.jpg|.png|.jpeg)$'))

    # 设置保存图片的路径,否则会保存到程序当前路径
    path = r'C:/Users/ASUS/desktop/images/'  # 路径前的r是保持字符串原始值的意思,就是说不对其中的符号进行转义
    for link in links:  # 使用attrs 获取标签属性
        # 保存链接并命名,time.time()返回当前时间戳防止命名冲突
        # urlretrieve()方法直接将远程数据下载到本地
        # urlretrieve(url, filename=None, reporthook=None, data=None)
        urllib.request.urlretrieve(link.attrs['src'],path + '\%s.png' % time.time())  # 使用request.urlretrieve直接将所有远程链接数据下载到本地
        txt.insert(END, '已爬取 '+link.attrs['src']+'\n')
        txt.update()
    txt.insert(END,'\n'+'\n')# 文本最后插入
    txt.insert(END, '保存成功!保存路径:'+path)
    inp1.delete(0, END)

root = Tk()
root.geometry('460x240')
root.title('爬取图片界面')

lb1 = Label(root, text='请输入需要爬取的网页')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1 = Entry(root)
inp1.place(relx=0.1, rely=0.2, relwidth=0.8, relheight=0.1)

# 方法

btn1 = Button(root, text='开始爬取', command=input1)
btn1.place(relx=0.1, rely=0.3, relwidth=0.8, relheight=0.2)

txt = Text(root)
txt.place(relx=0.1, rely=0.5,relwidth=0.8, relheight=0.4)

root.mainloop()

追加txt.update(),实时更新输出内容

 

原理:爬取页面img元素内所有以jpg,png,jpeg结尾的图片,暂时无法爬取gif图片,通过request.urlretrieve将远程链接数据下载到本地

 

效果:

posted @ 2020-07-04 19:09  ch0bits  阅读(2854)  评论(0编辑  收藏  举报