zoukankan      html  css  js  c++  java
  • 初出茅庐---程序测试与爬虫

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

    一、对程序进行测试

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

    测试一个函数:

    代码实现如下

     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 import pandas
     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     t_list=[]
    19     data=soup.find_all('tr')
    20     for tr in data:
    21         ltd=tr.find_all('td')
    22         if len(ltd)==0:
    23             continue
    24         singleUniv=[]
    25         for td in ltd:
    26             singleUniv.append(td.string)
    27         t_list.append(singleUniv)
    28     return t_list
    29 
    30 def printUnivList(num,t_list):
    31     print("{1:^2}{2:{0}^10}{3:{0}^6}{4:{0}^4}".format(chr(12288),"排名","学校名称","省市","总分"))
    32     for i in range(num):
    33         u=t_list[i]
    34         print("{1:^4}{2:{0}^10}{3:{0}^5}{4:{0}^8}".format(chr(12288),u[0],u[1],u[2],eval(u[3])))
    35 
    36 def saveCSV(file_name,t_list):
    37     FormData=pandas.DataFrame(t_list)
    38     FormData.columns=["排名","学校名称","省市","总分","生源质量","培养成果","人才培养得分"]
    39     FormData.to_csv(file_name,encoding='utf-8',index=False)
    40  
    41 def main(num):
    42     url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2015_1.html'
    43     html=getHTMLText(url)
    44     soup=BeautifulSoup(html,"html.parser")
    45     data=fillUnivList(soup)
    46     printUnivList(num,data)
    47     saveCSV("E:\daxuepaiming_data.csv",data)
    48 
    49 main(10)

    结果如图所示

  • 相关阅读:
    test
    VS dll 引用依赖
    Git配置
    编码--文字输入的前因后果
    base64相关
    异或
    UNION / UNION ALL 区别
    数据库使用规范
    chrome插件开发学习(一)
    缓存穿透 缓存雪崩 缓存并发
  • 原文地址:https://www.cnblogs.com/xiayiLL/p/10909372.html
Copyright © 2011-2022 走看看