Python学习笔记——week_7

第十章 调试

1. 异常处理

(1)使用try、except抛出异常

try:
   return 42/0
except ZeroDivisionError:   #当该错误出现时,打印信息
   print('分母不能为0')
try:
    raise Exception('这是一个错误')
except Exception as err:    #将Exception对象保存到err变量中
    print(str(err))

一般来说,这个语句可以防止try语句中的程序出错导致整个程序崩溃

(2) 反向追踪错误信息字符串
使用traceback模块中的traceback.format_exc()函数可以获取Exception对象并返回它的字符串格式,这样就可以将其写入到错误日志文件夹以便调阅。

import traceback
try:
    raise Exception('这是一个错误信息')
except:
    errorFile = open('errorInfo.txt','w') #写入模式打开错误文件
    erroeFile.write(traceback.format_exc())  #写入Exception对象的字符串
    errorFile.close()
    print('错误已记录')

2.断言

(1)assert关键词
内容:assert关键字、条件(求值为Ture或者False)、逗号、当条件为False时显示的字符串

x=20
assert x==20,'数字必须是20'
x=25
assert x==20,'数字必须是20'

输出为:
在这里插入图片描述

(2)在运行Python时传入-O选项可以禁用断言语句(在命令窗口运行python程序时)

3. 日志

(1)使用logging模块显示日志信息:

import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('输出DEBUG级别日志信息')

(2)日志级别

级别日志函数简介
DEBUGlogging.debug()最低级别,用于小细节
INFOlogging.info()一般级别
WARNINGlogging.warning()可能出现问题的地方
ERRORlogging.error()记录错误
CRITICALlogging.critical()最高级别,记录致命错误

ps.在(1)中的basicConfig()函数可以改变其level参数的的值来改变需要输出的日志信息,logging.DEBUG只显示debug级别的日志,logging.ERROR将显示ERROR和CRITICAL这种会导致程序崩溃的错误日志

(3)设置日志文件并写入日志信息:

import logging
logging.basicConfig(filename='logFile.txt',level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')

(4)禁用日志
程序调试完成后,且没有发现什么大的问题就可以调用logging.disable()函数来禁用logging模块:

import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('输出日志信息')

logging.disable(logging.CRITIACL) #禁用所有日志
logging.disable(logging.DEBUG) #禁用debug级别的日志
logging.disable(logging.ERROR) #禁用ERROR级别及以下的日志

4. IDLE调试器

主要按钮作用:

按钮作用
GO运行程序到断点或结束
Step运行到下一行代码或者下一行函数中的第一行,然后暂停
Over类似Step,但会直接得到下一行的函数的返回值
Out离开由Step进入的函数
Quit完全停止调试器

5. 实践作业——调试硬币抛掷

import random
guess =''
while guess not in ('正面','反面'):
    print('猜猜是正面还是反面')
    guess = input()
toss = random.randint(0,1)
#改正——————————————————————
if toss == 0:
    toss = '正面'
else :
    toss = '反面'
#区间——————————————————————
if toss == guess:
    print('你赢了')
else:
    print('再给你一次机会')
    guess = input()
    if toss ==guess:
        print('好吧,你赢了')
    else:
        print('你输了')

第十一章 从Web抓取信息

1. 使用webbrowser模块

import webbrowser
webbrowser.open('https://www.baidu.com') # 直接用默认浏览器打开这个网页

2. 使用requests模块

import requests
res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')  #下载文件
res.raise_for_status()  #程序无反应表示文件下载正常
playFile = open('罗密欧.txt','wb')
#逐字写入到该文件
for chunk in res.iter_content(10000):
    playFile.write(chunk)
playFile.close()

ps.iter_comtent()方法可以获取下载文件的内容

3. 使用BeautifulSoup(bs4)模块

(1)select()选择器匹配对象

方法匹配
soup.select(‘div’)所有 div元素(多个元素列表)
soup.select(’#author’)带有id='author’的元素
soup.select(’.notice’)带有class=‘notice’的元素
soup.select(‘div span’)所有在div元素下的span元素
soup.select('div > span‘)所有直接在div元素下的span元素,中间没有其他元素
soup.select(‘input[name]’)所有input元素且有一个name 属性
soup.select('input[type=“button”]’)所有input元素且有一个type=‘button’ 属性

ps.soup表示获取的网页存放的变量

(2)简略使用

import requests,bs4
res = requests.get('http://jjxxw.cq.gov.cn/zwgk_213/fdzdgknr/zcwj/qtwj/')  #下载网站主页
res.raise_for_status()
html = bs4.BeautifulSoup(res.text)  #获取网站的文本格式
fileList = html.select('ul[class="cwx-list"]') #获取ul[class="cwx-list"]元素
len(fileList)
title = html.select('ul[class="cwx-list"] > li > a')

4. 使用selenium模块

(1)启动浏览器

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.baidu.com')

ps.在使用谷歌浏览器时,需要安装浏览器名为chromedriver的驱动程序

(2)页面中寻找元素
匹配元素有两种方法;

方法作用
find_element_*返回匹配到的第一个WebElement对象
find_elements_*返回匹配到的所有WebElement对象的列表

在browser上寻找WebElement对象(WebElements):

方法名对象
browser.find_element_by_class_name(‘bookcover’)class ="bookcover"的元素
browser.find_element_by_css_selector(selector)匹配CSS selector的元素
browser.find_element_by_id(id)匹配id=“id” 的元素
browser.find_element_by_link_text(text)完全匹配提供text的< a>元素
browser.find_element_by_partial_link_text(text)包含提供text的< a>元素
browser.find_element_by_name(name)匹配name属性的元素
browser.find_element_by_tag_name(name)匹配标签name属性的元素(大小写无关)

获取WebElement对象的属性

属性或方法描述
tag_name标签名
get_attribute(name)该元素name属性的值
text该元素内的文本
clear(‘x’)对于文本字段或文本区域元素,清除其中输入的文本x
is_displayed()该元素是否可见
is_enabled(‘x’)该检查输入元素x是否启用
is_selected()对于复选框和单选框元素是否被选中
location一个字典,表示该元素在页面上的位置

(3)点击页面
由find_element_*和find_elements_*返回的WebElement对象可以调用click()方法模拟鼠标点击这个对象。
(4)填写提交表单

123
找到页面中的< input> 或者< textarea>元素调用send_keys()输入文本调用submit()提交文本

(5)模拟键盘
以求方便,先导入详细模块

from selenium.webdriver.common.keys import Keys
属性含义
Keys.DOWN, Keys.Up, Keys.LEFT, Keys.RIGHT,上下左右方向键
Keys.ENTER , Keys.RETURN回车和换行键
Keys.HOME, Keys.END, Keys.PAGE_DOWN, Keys.PAGE_UPHome、End、Page down、Page up键
Keys.ESCAPE,Keys.BACK_SPACE,Keys.DELETEEsc 、Backspace、字母键
Keys.F1 ,Keys.F2 …Keys.F12F1至F12
Keys.RABTab键

(6)模拟浏览器按钮

方法含义
browser.back()点击返回按钮
browser.forward()点击前进按钮
browser.refresh()点击刷新按钮
browser.quit()点击关闭窗口按钮

5. 实践项目

见复习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值