爬虫窗口化实践
经过一段基本的爬虫和GUI学习后,实践了许多爬虫例子和GUI例子。 突发奇想将两者结合起来,因此写了这篇博客。
GUI 设计导入python内置库tkinter
爬虫 设计导入python第三方库 requests 和 BeautifulSoup 库。
我们先理思路。
首先我们需要设计主窗体,其次需要向主窗体内添加元素,其中要有提示输入元素,输入元素,控制元素,输出元素。
其次当输入元素后我们需要将输入的元素导入爬虫函数,爬取网页信息,随后将爬虫得到的信息同过输出元素输出。
接下来设计窗口
import requests
import tkinter
from bs4 import BeautifulSoup
root = tkinter.Tk() # 主窗体
root.geometry("450x350")
root.title("Network catch") # 提示输入元素
lb = tkinter.Label(root,text ="Input url",height = 3,width = 20,font = ("宋体",20))
lb.pack()
entry = tkinter.Entry(root) # 输入元素
entry.pack()
btn = tkinter.Button(root,text = "Confirm",height = 1,width = 10,font = ("宋体",20),\
command = Get_url ) # 控制元素
btn.pack()
Content = tkinter.Text(root) # 输出元素
Content.pack()
root.mainloop()
上面代码完成整个窗体的结构,pack方法简便,有兴趣的小伙伴可以试试 grid 或者 place 方法。
接下来我们要将输入的元素entry转变为字符串类型进行爬虫。
python网页爬虫的基本框架大家也想必都清楚。
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
r.text
except:
return "Erro"
我们通过这个框架进行拓展,只需将url的来源提供改为窗口时的输入元素entry。因此稍加修改后的如下:
def Get_url():
url = str(entry.get()) # 获取url
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text,'html.parser')
except:
return "Erro"
Content.insert(tkinter.END,soup.prettify()) # 将网页信息插入窗体中输出
Content.delete(0,tkinter.END)
这样就完成了我们的所有分布设计,接下来只需将所有整合一起。
import requests
import tkinter
from bs4 import BeautifulSoup
def Get_url():
url = str(entry.get())
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text,'html.parser')
except:
return "Erro"
Content.insert(tkinter.END,soup.prettify())
Content.delete(0,tkinter.END)
root = tkinter.Tk()
root.geometry("450x350")
root.title("Network catch")
lb = tkinter.Label(root,text ="Input url",height = 3,width = 20,font = ("宋体",20))
lb.pack()
entry = tkinter.Entry(root)
entry.pack()
btn = tkinter.Button(root,text = "Confirm",height = 1,width = 10,font = ("宋体",20),\
command = Get_url )
btn.pack()
Content = tkinter.Text(root)
Content.pack()
root.mainloop()
有兴趣的小伙伴也可以试试添加装饰器来进行爬虫。 ok。。溜了。。