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()
基本流程
- 调用urllib.request的urlopen方法,得到一个response对象,代表网页
- 调用response的read方法,得到一个字节流对象,代表网页源码
- 将源码字节流传给beautifulsoap,得到bs对象,用于分析标签
- 调用find和find_all方法,找到目标标签,需要时科对找到的标签在执行find_all,直到找到最终结果,最后可用标签的text属性得到数据内容
- 把得到的内容写入列表,再传给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)