爬虫
一、程序测试
测试球赛程序中的所有函数,并输出测试结果
1、测试printInfo()(程序的介绍性信息)
代码如下:
1 def printInfo(): 2 print("这个程序模拟两个选手A和B的羽毛球竞技比赛") 3 print("程序需要两个选手的能力值0-1") 4 print("规则:三局两胜--21分制") 5 print("作者:一枚小可爱--08") 6 7 printInfo()
结果如下:
2、测试getInput()(输入参数)
代码如下:
1 def getInput(): 2 a = eval(input("请输入选手A的能力值(0-1):")) 3 4 b = eval(input("请输入选手B的能力值(0-1):")) 5 6 m=eval(input("比赛的局数:")) 7 8 n = eval(input("模拟比赛的场次:")) 9 return a,b,m,n 10 11 getInput()
结果如下:
3、测试printSummary()(打印结果)
代码如下:
1 def printSummary(winsA,winsB): 2 3 n = winsA + winsB 4 5 print("竞技分析开始,共模拟{}场比赛".format(n)) 6 7 print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n)) 8 9 print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n)) 10 11 winA=eval(input()) 12 winB=eval(input()) 13 printSummary(winA,winB)
结果如下:
4、测试simNGames()(计算赢得比赛的场数)
因为原来的函数要调用simOneGame()函数,所以我就改了一下函数,直接用probA和probB来代替scoreA和scoreB,即用能力值来代替每一局的分数。
代码如下:
def simNGames(m,n,probA,probB): winsA,winsB = 0,0 wa,wb=0,0 for i in range(n): for i in range(m): #scoreA,scoreB = simOneGame(probA,probB) scoreA,scoreB=probA,probB if scoreA > scoreB: wa += 1 else: wb += 1 if wa==2: winsA+=1 wa,wb=0,0 break if wb==2: winsB+=1 wa,wb=0,0 break return winsA,winsB m=eval(input()) n=eval(input()) probA=eval(input()) probB=eval(input()) print(simNGames(m,n,probA,probB))
结果如下:
5、测试simOneGame()(统计一局比赛的分数)
代码如下:
1 from random import random 2 def simOneGame(probA,probB): 3 4 scoreA,scoreB = 0,0 5 6 serving = "A" 7 while not gameOver(scoreA,scoreB): 8 9 if serving == "A": 10 11 if random() < probA: 12 13 scoreA += 1 14 else: 15 serving = "B" 16 else: 17 if random() < probB: 18 scoreB += 1 19 else: 20 serving = "A" 21 return scoreA,scoreB 22 23 def gameOver(a,b): 24 if(a>=20 or b>=20): 25 if(abs(a-b)==2 and a<=29 and b<=29): 26 return True 27 else: 28 return a==30 or b==30 29 else: 30 return False 31 32 #for i in range(10): 33 a=eval(input()) 34 b=eval(input()) 35 print(gameOver(a,b)) 36 37 probA=eval(input()) 38 probB=eval(input()) 39 print(simOneGame(probA,probB))
结果如下:
到此函数就测试完了,且函数都正确~~~
二、访问浏览器
用requests库的get函数访问360浏览器20遍,打印返回状态,text()内容,计算text()属性和content()属性所返回网页内容的长度。
代码如下:
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Mon May 20 10:03:30 2019 4 5 @author: 一枚小可爱--08 6 function:访问浏览器 7 """ 8 import requests 9 from bs4 import BeautifulSoup 10 def getHTMLText(url): 11 try: 12 r=requests.get(url,timeout=30) 13 soup=BeautifulSoup(r.text) 14 r.raise_for_status() 15 r.encoding='utf-8' 16 return r.text,r.status_code,len(r.text),r.encoding,len(soup.text) 17 except: 18 return "" 19 20 url="https://hao.360.com" 21 for i in range(20): 22 print(i) 23 print(getHTMLText(url))
显示如下:
三、将一个HTML页面保持为字符串,并完成以下计算要求
代码如下:
from bs4 import BeautifulSoup import re soup=BeautifulSoup("<head><title>菜鸟教程(runoob.com)</title></head><body><h1>我的第一个标题</h1><p id="frist">我的第一个段落。</p></body><tr><td>row 1,cell 1</td><td>row 1,cell 2</td></tr><tr><td>row 2,cell 1</td><td>row 2,cell 2</td></tr></body></table>","html.parser") print(soup.head,"08") #打印head的内容和我的学号后两位 print(soup.body) #打印body的内容 print(soup.find_all(id="china")) #打印id为china的文本 r=soup.text pattern = re.findall(u'[u1100-uFFFDh]+?',r) print(pattern)
结果如下:
四、爬中国大学排名网站内容
代码如下:
# -*- coding: utf-8 -*- """ Created on Fri May 24 19:23:00 2019 @author: Administrator """ import requests from bs4 import BeautifulSoup #import csv import pandas as pd allUniv=[] def getHTMLText(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding='utf-8' return r.text except: return "" def fillUnivList(soup): data=soup.find_all('tr') for tr in data: ltd=tr.find_all('td') if len(ltd)==0: continue singleUniv=[] for td in ltd: singleUniv.append(td.string) allUniv.append(singleUniv) def printUnivList(num): print("{:^4}{:^10}{:^5}{:^8}{:^10}".format("排名","学校名称","省市","总分","年费")) for i in range(num): u=allUniv[i] print("{:^4}{:^10}{:^5}{:^8}{:^10}".format(u[0],u[1],u[2],u[3],u[6])) return u ''' def main(num): url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html' html=getHTMLText(url) soup=BeautifulSoup(html,"html.parser") fillUnivList(soup) printUnivList(num) #saveUnivData(u) ''' def write_csv(list): name = ['排名', '学校名称', '省份', '总分', '生源质量(新生高考成绩得分)', '培养结果(毕业生就业率)', '社会声誉(社会捐赠收入·千元)', '科研规模(论文数量·篇)', '科研质量(论文质量·FWCI)', '顶尖成果(高被引论文·篇)', '顶尖人才(高被引学者·人)', '科技服务(企业科研经费·千元)', '成果转化(技术转让收入·千元)', '学生国际化(留学生比例)'] name2 = ['a', 'b', 'c'] test = pd.DataFrame(columns=name, data=list) test.to_csv('D:/我的文件/Python作业/CrawUniv.csv', encoding='gbk') def main(num): url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html' html = getHTMLText(url) soup = BeautifulSoup(html, "html.parser") fillUnivList(soup) printUnivList(num) print("完成") main(600)
显示结果如下:
到这里就结束啦~~~~