我是一名数学导师,我找到了https://www.yksityisopetus.fi/网站,在那里你可以搜索学生。我制作了一个Python解析器,以找到希望至少25欧元/小时的数学教学的学生。这段代码有什么改进吗?
import requests
import tkinter as tk
link = "https://www.yksityisopetus.fi/opiskelijat/matematiikka/min-25-per-tunti/uusin-ensin"
f = requests.get(link)
lista = f.text.split('\n')
ilmot = []
for i in range(len(lista)):
if "<a href=\"/" in lista[i] and "<a href=\"/opettajat" not in lista[i] and "<a href=\"/contact" not in lista[i]:
if lista[i] not in ilmot:
ilmot.append(lista[i])
parsittu = []
for i in range(len(ilmot)):
ilmo = "https://www.yksityisopetus.fi"+ilmot[i].split('"')[1]
f = requests.get(link)
f = f.text.split(">")
for j in range(len(f)):
if f[j] == '\n<br /':
parsittu.append(f[j+1])
s = ""
parsilmot = []
for i in range(len(parsittu)):
if parsittu[i].endswith('</div'):
parsilmot.append(parsittu[i][0:len(parsittu[i])-5])
p = list(set(parsilmot))
quote = ""
for i in p:
quote += i+"\n"
root = tk.Tk()
S = tk.Scrollbar(root)
T = tk.Text(root, height=4, width=100)
S.pack(side=tk.RIGHT, fill=tk.Y)
T.pack(side=tk.LEFT, fill=tk.Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)
T.insert(tk.END, quote)
tk.mainloop()发布于 2020-06-22 22:52:31
中
函数更容易测试,并且随着时间的推移更容易修改代码。
例如,我认为第一个块从服务器请求信息并创建链接列表。我认为第二个块处理链接列表并生成其他类型的列表。我认为第三个块迭代第二个块的列表并生成另一个列表。
如果这些块在函数中,那么主要逻辑将是不言自明的。例如,您的代码可能如下所示:
...
ilmot = get_students(link)
parsittu = some_other_function(ilmot)
parsilmot = another_function(parsittu)
quote = create_quote(parsilmot)
...如果这些函数都有合理的名称,那么代码就很容易理解,并且可以很容易地隔离地测试每个函数。
不仅如此,您还可以更容易地将所有这些代码移动到一个函数中,这样您就可以在UI中实现一个“刷新”功能,这样您就不必每次想更新数据时都重新启动脚本。
发布于 2020-06-23 15:00:41
是好是坏,英语是编程的通用语言。。将面向用户的内容本地化到芬兰语是完全可以的,但代码不应该是(例如lista、parsittu),原因有几个。Python本身在语法中使用英语单词,因此在其余代码中不使用英语单词是不一致的。
手动这样做是非常危险的,因为您是:
if "<a href=\"/" in lista[i]它很脆弱而且容易失败。使用BeautifulSoup代替。
在此之后:
f = requests.get(link)打电话
f.raise_for_status()否则,失败将是不明显的。
https://codereview.stackexchange.com/questions/244347
复制相似问题