首页 > 其他 > 详细

第一个爬虫和测试

时间:2020-05-13 22:56:23      阅读:73      评论:0      收藏:0      [点我收藏+]

一、python之测试函数

from random import random
def main():
    printInfo()
    probA,probB,m,n = getInput()
    winsA,winsB = simNGames(m,n,probA,probB)
    printSummary(winsA,winsB)
def printInfo():
    print("这个程序模拟两个选手A和B的羽毛球竞技比赛")
    print("程序需要两个选手的能力值0-1") 
    print("规则:三局两胜--21分制")
    print("作者:阮满欢 学号:47")
try:
     printInfo(x)
except:
    print(printInfo error)
 
def getInput():
    a = eval(input("请输入选手A的能力值(0-1):"))
 
    b = eval(input("请输入选手B的能力值(0-1):"))
 
    m=eval(input("比赛的局数:"))
 
    n = eval(input("模拟比赛的场次:"))
    return a,b,m,n
try:
     getInput(x)
except:
    print(getInput error)
def printSummary(winsA,winsB):
 
    n = winsA + winsB
 
    print("竞技分析开始,共模拟{}场比赛".format(n))
 
    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))
           
    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
try:
    printSummary(500)
except:
    print(printSummary error)
 
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)
 
            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
try:
    simNGames(1000, 0.1)
except:
    print(simNgame error)   
     
def simOneGame(probA,probB):
 
    scoreA,scoreB = 0,0
 
    serving = "A"
    while not gameOver(scoreA,scoreB):
 
        if serving == "A":
 
            if random() < probA:
 
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA,scoreB
try:
    simOneGame( 0.1)
except:
    print(simOneGame errror)
def gameOver(a,b):
    if(a>=20 or b>=20):
        if(abs(a-b)==2 and a<=29 and b<=29):
            return True
        else:
            return a==30 or b==30
    else:
        return False
try:
    gameOver(10)
except:
    print(gameOver2 error)
main()

这个代码中,在每个函数后都有try.....except测试了一遍,如果有错误会分别对某个函数进行报错。

因为我在参数中故意写错,故会出现错误,因此运行结果:

技术分享图片

 

 

 二、第一次爬虫之访问360搜索主页网页

1、Requests库概述

requests库支持非常丰富的链接访问功能,包括:国际域名和URL获取、HTTP常链接和链接缓存、HTTP会话和Cookie保持、浏览器使用风格SSL验证、基本的摘要认证、有效的键值对Cookie记录、自动解压缩、文件分块上传、HTTP(S)代理功能、链接超时处理、流数据下载等。有关requests库更多的介绍可访问:http://docs.python-requests.org

 

 

 2、requests库中访问网页的请求函数

技术分享图片

3、用requeses库的个体()函数访问必应主页20次,打印返回状态,text内容,并且计算text()属性和content属性返回网页内容的长度

import requests
def getHTMLText(self):
    try:
        for i in range(0,20):                   #访问20次
            r = requests.get(url, timeout=30)
        r.raise_for_status() #如果状态不是200,引发异常
        r.encoding = ‘utf-8‘ #无论原来用什么编码,都改成utf-8
        return r.status_code,r.text,r.content,len(r.text),len(r.content)  ##返回状态,text和content内容,text()和content()网页的长度
    except:
        return ""
url = "http://www.so.com/"
print(getHTMLText(url))
 

 其运行结果(因为运行结果过长,这里只展示一部分):

技术分享图片

 

技术分享图片

 

 三、HTML页面

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)47</title>
</head>
<body>
<h1>我的第一个标题</h1>
<p id="first">我的第一个段落。</p >
</body>
    <table border = "1">
<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>
    </table>
</html>

运行结果:

技术分享图片

 四、爬虫大学排名

import requests
from bs4 import BeautifulSoup
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("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}{5:{0}^10}".format(chr(12288),"排名","学校名称","省市","总分","培养规模"))
    for i in range(num):
        u = allUniv[i]
        print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8.1f}{5:{0}^10}".format(chr(12288),u[0],u[1],u[2],eval(u[3]),u[6]))
def main(num):
    url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"
    html = getHTMLText(url)
    soup = BeautifulSoup(html,"html.parser")
    fillUnivList(soup)
    printUnivList(num)
main(10)

运行结果:

技术分享图片

 

第一个爬虫和测试

原文:https://www.cnblogs.com/ruanmh/p/12884243.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!