全民一起玩Python基础篇第八课:基本技巧与应用(下)

from urllib.request import urlopen
#urlopen  打开网页
r=urlopen('http://www.boc.cn/sourcedb/whpj/')
#返回一个response 对象
c=r.read()
s=c.decode('utf-8')
#解码
print(s)

解析抓来的数据,可以用正则表达式,也可以用美味汤(beautiful soup)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

把得到的汇率写入Excel

import xlwings as xw
from urllib.request import urlopen
from bs4 import BeautifulSoup
#导入BS模块
app=xw.App()
wb=app.books.add()
ws=wb.sheets[0]
r=urlopen('http://www.boc.cn/sourcedb/whpj/')
#返回一个response 对象
c=r.read()
bs_obj=BeautifulSoup(c,features='lxml')
#创造BS对象
t=bs_obj.find_all('table')[1]
#先解table标签,得到所有table的第二个元素
all_tr=t.find_all('tr')
all_tr.pop(0)
#删除列表中的第一个元素
arr=[]
for r in all_tr:
    all_td=r.find_all('td')
    #再解td标签
    print(f'{all_td[0].text} 卖出价:{all_td[4].text}')
    #Tag.text 取得被该标签括起来的可显示在浏览器中
    #的文字信息
    #如果g为<td>123</td>
    #则g.text就是字符串"123"
    arr.append(f'{all_td[0].text} 卖出价:{all_td[4].text}')

ws.range('A1:B30').value=arr
wb.save('D:/汇率信息.xlsx')
wb.close()
app.quit()

基本流程

  1. 调用urllib.request的urlopen方法,得到一个response对象,代表网页
  2. 调用response的read方法,得到一个字节流对象,代表网页源码
  3. 将源码字节流传给beautifulsoap,得到bs对象,用于分析标签
  4. 调用find和find_all方法,找到目标标签,需要时科对找到的标签在执行find_all,直到找到最终结果,最后可用标签的text属性得到数据内容
  5. 把得到的内容写入列表,再传给Excel

可以和之前VBA写的爬虫代码进行对比

明显感到Python爬的代码简洁一些

GUI 界面

转换拼音

from tkinter import Tk,Entry,Button
import pinyin
def convert():
    s=ent_hanzi.get()
    #读取键入的字符串
    p=pinyin.get(s)
    ent_pinyin.insert('end',p)
    #end结尾,表追加
    return
fm_main=Tk()
#创建窗体对象
ent_hanzi=Entry(fm_main)
ent_pinyin=Entry(fm_main)
#创建的控件显示到fm_main上
btn=Button(fm_main,text='显示拼音',command=convert)
#创建按钮对象,定义显示文本,以及对应函数
ent_hanzi.pack()
#显示控件
btn.pack()
#显示按钮
ent_pinyin.pack()
#pack的顺序决定显示顺序
fm_main.mainloop()
#启动窗体程序,相当于进入一个等待响应的死循环

下载上节课的汇率信息

from tkinter import Tk,Entry,Text,Button
from urllib.request import urlopen
from bs4 import BeautifulSoup
#导入BS模块
def download():
    c=urlopen('http://www.boc.cn/sourcedb/whpj/').read()
    bs_obj=BeautifulSoup(c,features='lxml')
    all_tr=bs_obj.find_all('table')[1].find_all('tr')
    for r in all_tr[1: ]:
        all_td=r.find_all('td')
        t1.insert("end",f'{all_td[0].text} 卖出价:{all_td[4].text}\n')

def save():
    f=open('d:/currency.txt','w')
    f.write(t1.get(1.0,'end'))
    #text的读取要给起止位,1.0是第一行  第一列
    f.close()
    
fm_main=Tk()
t1=Text(fm_main)
b1=Button(fm_main,text='下载最新数据',command=download)
b2=Button(fm_main,text='保存到文本文件',command=save)
b1.pack()
b2.pack()
t1.pack()

fm_main.mainloop()

在这里插入图片描述

将统计党史人物词频做成窗体

from tkinter import Tk,Entry,Button,Text

def read():
    s=ent_word.get()
    #获取键入的信息
    s=s.split()
    #按照空格分隔,存入列表
    d=dict()
    for i in s:
        d.setdefault(i,0)
        #将列表转为字典,赋予默认值0
    s=ent_path.get()
    f=open(s,'r')
    # 用r只读,encoding按照utf-8解码
    
    for s in f.readlines():
    # 逐行读取
        for name in d:
            d[name]=d[name]+s.count(name)

    for k in d:
        print(k,'出现了',d[k],'次')
        t1.insert("end",f'{k} 出现了:{d[k]} 次\n')

    f.close()
    #关闭了才算保存

def save():
    f=open('d:/党史人物词频统计.txt','w')
    #没有就新建,有就追加
    f.write(t1.get(1.0,'end'))
    #text的读取要给起止位,1.0是第一行  第一列
    f.close()

fm_main=Tk()
t1=Text(fm_main)
ent_path=Entry(fm_main)
ent_word=Entry(fm_main)
btn_read=Button(fm_main,text='读取数据进行统计',command=read)
btn_save=Button(fm_main,text='保存数据到文件',command=save)

ent_path.pack()
ent_word.pack()
btn_read.pack()
t1.pack()
btn_save.pack()
fm_main.mainloop()

在这里插入图片描述
在这里插入图片描述

窗体控件二:EasyGui

导入第三方模块正常从Pycharm里面安装就行

import easygui as g
g.msgbox('你好,锦到黑')
import easygui as g
import sys
while True:
    g.msgbox('界面')
    msg='学习个啥'
    #窗体内部的文本
    title='游戏'
    #窗体界面上的名字
    choices=['谈恋爱','学编程']
    #窗体里面的两个选择
    choice=g.choicebox(msg,title,choices)
    g.msgbox('你的选择是'+str(choice),'结果')
    #“结果”显示在窗体界面,然后文本输出前面的部分
    msg='你希望重新开始吗'
    title='请选择'
    if g.ccbox(msg,title):
    #cc是cancel和continue
        #窗体上给选择按钮
        pass
    else:
        sys.exit(0)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值