初出茅庐---程序测试与爬虫

时间:2022-08-16 23:40:02

初出茅庐----程序测试与爬虫

一、对程序进行测试

测试采用体育竞技模拟分析程序代码

测试一个函数:

代码实现如下

 1 def gameover(a,b):  2     if a>=11 and (a-b)>=2:  3         print(a)  4     if b>=11 and (b-a)>=2:  5         print(b)  6 try:  7  gameover()  8 except:  9     print("error") 10 
11 a,b=eval(input("请输入测试值:")) 12 gameover(a,b)

结果如图所示(只有输入的数据准确,才会输入数值)

初出茅庐---程序测试与爬虫

测试多组数据:(暂时不懂)

 

 

二、爬虫-----request库

1.request库的安装

在命令行输入pip install request,即可自动下载安装

2.request的使用

(1)request库的网页请求函数

函数 描述
get(url[,timeot=n]) 对应于HTTP的GET方式,获取网页最常用的方法,可以增加timeout=n参数,设定每次请求超时时间为n秒
post(url,data={'key':'value'}) 对应于HTTP的POST方式,其中字典用于传递客户数据
delete(url) 对应于HTTP的DELETE方式
head(url) 对应于HTTP的HEAD方式
option(url) 对应于HTTP的OPTIONS方式
put(url,data={'key':'value'}) 对应于HTTP的PUT方式,其中字典用于传递客户数据

 

 

 

 

 

 

 

 

 

(2)respomse对象的属性

response对象的属性
属性 描述
status_code HTTP请求的返回状态,整数,200表示连接成功,404表示失败
text HTTP响应内容的字符串形式,即url对应的网页内容
encoding HTTP响应内容的编码方式
content HTTP响应内容的二进制形式

 

 

 

 

 

 

 

 

(3)response对象的方法

方法 描述
json() 如果HTTP响应内容包含json格式数据,则该方法解析json数据
raise_for_status() 如果不是200,则产生异常

 

 

 

 

 

3.牛刀小试

1.用request库爬取百度网页内容,并且打印20次

代码实现如下

 1 import requests  2 def gethtmltext(url):  3     try:  4         r=requests.get(url,timeout=30)  5  r.raise_for_status()  6         r.encoding='utf-8'
 7         return r.text  8     except:  9         return ""
10 
11 url="https://www.baidu.com"
12 for i in range(20): 13     print(gethtmltext(url))

 

结果如图所示(由于打印的内容比较多,这里就不一一展示了)

初出茅庐---程序测试与爬虫

2.计算text属性和content属性所返回网页内容的长度

代码实现如下

 1 import requests  2 def gethtmltext(url):  3     try:  4         r=requests.get(url,timeout=30)  5  r.raise_for_status()  6         r.encoding='utf-8'
 7         return len(r.text),len(r.content)  8     except:  9         return ""
10 
11 url="https://www.baidu.com"
12 print(gethtmltext(url))

结果如图所示

初出茅庐---程序测试与爬虫

 三、对网页进行查找(BeautifulSoup4库)

 1.BeautifulSoup库的安装

命令行中输入

pip install beautifulsoup4

即可自动下载安装

2.BeautifulSoup的引用

>>>from bs4 import BeautifulSoup

3.BeautifulSoup的常用函数

(1)BeautifulSoup对象的常用属性

属性 描述
head HTTP页面的<head>内容
title HTTP页面标题,在<head>之中,由<title>标记
body HTTP页面中的<body>内容
p HTTP页面中第一个<p>内容
strings HTTP页面所有呈现在web上的字符串,即标签内容
stripped_strings HTTP页面所有呈现在web上的非空格字符串

 

 

 

 

 

 

 

(2)标签对象的常用属性

属性 描述
name 字符串,标签的名字,比如div
attrs 字典,包含了原来页面Tag所有的属性,比如href
contents 列表,这个Tag下所有子Tag的内容
string 字符串,Tag所包围的文本,网页中真实的文字

 

 

 

 

 

 

 

 

4.获取网页内容

代码实现如下

 

 1 html = '''<!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title>菜鸟教程(runoob.com)</title>
 6 </head>
 7 <body>
 8     <h1>我的第一个标题</h1>
 9     <p>我的第一个段落。</p>
10 </body>
11 </html>'''
12 
13 import re
14 def getChinese(html):
15     html_unicode=html.strip()
16     string=re.compile('[^\u4e00-\u9fff]')
17     chinese="".join(string.split(html_unicode))
18     return chinese
19 from bs4 import BeautifulSoup
20 soup=BeautifulSoup(html)
21 print("获取head标签内容:")
22 print(soup.head)
23 print("学号号数为11")
24 print()
25 print("获取body标签内容:")
26 print(soup.body)
27 print()
28 print(soup.title)
29 print()
30 print("获取html中的中文字符")
31 print(getChinese(html))

 

结果如图所示

初出茅庐---程序测试与爬虫

 四、爬取大学排名(2015年排名)

代码实现如下

 1 '''
 2 爬取中国大学排名
 3 author:xiayiLL
 4 '''
 5 import requests
 6 from bs4 import BeautifulSoup
 7 allUniv=[]
 8 def getHTMLText(url):
 9     try:
10         r=requests.get(url,timeout=30)
11         r.raise_for_status()
12         r.encoding='utf-8'
13         return r.text
14     except:
15         return ""
16 
17 def fillUnivList(soup):
18     data=soup.find_all('tr')
19     for tr in data:
20         ltd=tr.find_all('td')
21         if len(ltd)==0:
22             continue
23         singleUniv=[]
24         for td in ltd:
25             singleUniv.append(td.string)
26         allUniv.append(singleUniv)
27 
28 def printUnivList(num):
29     print("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}".format(chr(12288),"排名","学校名称","省市","总分"))
30     for i in range(num):
31         u=allUniv[i]
32         print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8}".format(chr(12288),u[0],u[1],u[2],eval(u[3])))
33 
34 def main(num):
35     url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2015_1.html'
36     html=getHTMLText(url)
37     soup=BeautifulSoup(html,"html.parser")
38     fillUnivList(soup)
39     printUnivList(num)
40 
41 main(10)

 

结果如图所示

初出茅庐---程序测试与爬虫