运行效果图:
————————————————————————————————————————————————————————————————————————————
————————————————————————————————————————————————————————————————————————————
先导入我们需要用到以下的几个模块:
from Tkinter import * #python中的gui界面模块
如果没有模块的话可以下载 打开cmd 输入命令pip install Tkinter
我们还需要导入fromScrolledText importScrolledText #gui界面的文本滚动条用来显示段子内容。
import requests #用于网站发送请求 如果没有此模块可在cmd中自行下载 命令如上 pip install ...
fromlxml importetree#用于解析网站源码
————————————————————————
我们先来画个简单的gui界面
root = Tk() #实例化
root.title('段子采集器') #这是我们要设置的标题
root.geometry('+500+150') #窗口出现的位置坐标
text = ScrolledText(root,font = ('微软雅黑',10)) #我们添加一个文本滚动条
text.grid() #grid函数是显示在gui界面上
button = Button(root,text = '开始采集',command=read) #添加一个按钮 command执行read函数(read函数我们下面会写,也就是采集段子的函数)
button.grid() #添加按钮事件
button1 = Button(root,text = '导出本地txt文件',command=write) #这个按钮执行将段子写进txt文件里面
button1.grid() #生成按钮
varl = StringVar() #设置字符显示
label = Label(root,font=('微软雅黑',10),fg='red',textvariable = varl) #生成我们要出现的字体颜色
label.grid()
varl.set('采集器准备就绪.....') #这是我们要设置的字体
——————————————————————————————————————
接下来我们开始爬取段子24小时爆笑笑话大全 - 糗事百科www.qiushibaike.com
这是他的网站页面 ,下来我们分析他的网站结构用来爬取我们想要获取的内容
可以看到他的段子内容是在div class=“content”下的span标签中 ,这里我们先做个标记。
开始码代码,我们先定义一个方法:
defget():
url = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'
headers = {'User-Agent': user_agent} #这里是我们设置的网站头信息 也就是你浏览器的信息 一般网站都会检测你是不是脚本 这是我们一种简单的伪装技术
html = requests.get(url,headers).text #发宋一次get请求获取网页的源代码
h = etree.HTML(html) #我们将获取到的网页源码进行解析
a = h.xpath('.//div[@class="content"]/span/text()') # 变量a 就是我们要爬取的内容了我们刚才看到他的段子内容是写在div标签下的属性为class=“conten”下的span标签中 text() 是我们获取他span标签中的文字内容
returna
注意!!!!-------xpath语法返回的是个列表--------- 上面的编码我们只要循环将列表里面的每个值打印出来显示就正常了
我们画gui界面的时候采集按钮触发后执行的是read函数,我们再来写一个read函数用来将内容显示在界面上:
defread():
q = get() #获取get函数的值(get函数是我们获取到段子的列表)
fori inq:
text.insert(END, i) #text是我们设置的文本滚动条变量insert方法是插入 ,
varl.set('采集完毕!') #我们循环插入列表中的每个段子,varl.set方法是添加文字描述
--——————————
我们再来写个 导出txt文件的方法:
当button1触发后也就是我们的导出本地文件按钮,我们执行这个函数:
defwrite():
qq = get() #获取段子内容
fi = open('D:/duanzi.txt','w') #创建一个txt文件路径是在d盘下面文件名为duanzi.txt ‘w’是以写模式
fori inqq:
i = i.encode('utf-8') #循环列表中的每个段子 这里我们做个解码 转换成utf-8
fi.write(i+'\n') #每写入一条段子 换行
varl.set('导出完毕!(保存路径为D盘下的duanzi.txt文件)') #执行完函数后我们让他显示导出完毕。