異常處理 什麼是異常處理 (處理異常,報錯error) 捕捉異常 這種方法只能捕捉這個指定錯誤, 當然也有其他錯誤 這樣很麻煩,異常有很多種 這樣就用Exception 就能自動識別錯誤,很方便~ 字元串常用方法 索引取值 切片 成員運算 for迴圈 字元串長度 strip() l.strip() ...
異常處理
什麼是異常處理 (處理異常,報錯error)
print(1 / 0) # 報了0除錯誤
# 列印結果:
Traceback (most recent call last):
File "D:/pycharm_project/day07/01異常處理.py", line 18, in <module>
print(1 / 0)
ZeroDivisionError: division by zero
捕捉異常
try:
print(1 / 0) # 有錯誤就跳過,沒錯誤就執行
except ZeroDivisionError: # 錯誤被捕捉了
pass # 啥也不做
print(1)
這種方法只能捕捉這個指定錯誤, 當然也有其他錯誤
try:
print(x)
print(1 / 0) # 有錯誤就跳過,沒錯誤就執行
except ZeroDivisionError: # 錯誤被捕捉了
pass # 啥也不做
except NameError:
pass
print(1)
這樣很麻煩,異常有很多種
try:
print('--------')
print(a)
except Exception as e: # 把錯誤信息輸入出來,同時一般把錯誤信息記錄到日誌
print(e)
print('--------')
# 列印結果:
--------
name 'a' is not defined
--------
這樣就用Exception 就能自動識別錯誤,很方便~
字元串常用方法
索引取值
s = 'hello'
print(s[0]) # 取到h
切片
s = 'hello world'
print(s[0:5]) # 取到hello
成員運算
s = 'hello'
print('h' in s) # 列印True
for迴圈
s = 'hello'
for i in s:
print(i)
# 列印:
h
e
l
l
o
字元串長度
s = 'hello'
print(len(s)) # 列印字元串長度 5
strip()
s = '** hello '
print(s.strip()) # 預設去掉兩端空格
print(s.strip('*')) # 去掉*
print(s.strip('* h')) # 去掉* h
l.strip() 和 r.strip()
s = '**cwz**'
print(s.lstrip('*')) # 去掉左邊*
print(s.rstrip('*')) # 去掉右邊*
startswith()和endswith()
s = 'hello'
print(s.startswith('h')) # True
print(s.endswith('o')) # True
find() 尋找索引位置
s = 'hello'
print(s.find('h')) # 列印0
print(s.find('x')) # 字元串中沒有的返回-1
print(s.find('l')) # 字元串中有相同的,找第一個 返回2
index() 索引位置
s = 'hello'
print(s.index('o')) # 列印4
print(s.index('a')) # 字元串中沒有的直接報錯
join() 把列表中元素拼接起來
lt = ['a','b','c']
print('*'.join(lt))
# 列印結果:
a*b*c
split() 切割
s = 'a*b*c'
print(s.split('*')) # 以*切割
# 列印結果:
['a', 'b', 'c']
replace 替換
s = 'reese neo'
print(s.replace('reese','cwz'))
# 列印結果:
cwz neo
center/ljust/rjust 居中/居左/居右
s = 'hello'
print(s.center(20,'-'))
print(s.ljust(20,'-'))
print(s.rjust(20,'-'))
# 列印結果:
-------hello--------
hello---------------
---------------hello
isdigit() 和 isalpha()
s = '123'
print(s.isdigit()) # 判斷是否全為數字 True
print(s.isalpha()) # 判斷是否全為字母 Flase
count 計數
s = 'aabcda'
print(s.count('a')) # 列印3
selenium模塊
什麼是selenium
selenium是一個自動化測試工具
為什麼要用selenium
- 通過selenium可以驅動瀏覽器,跳過登錄滑動驗證
- 缺點是爬蟲效率低下
怎麼使用selenium
- 安裝驅動chromedriver http://npm.taobao.org/mirrors/chromedriver/
- 安裝selenium pip3 install selenium
selenium基本使用
from selenium import webdriver # 用來驅動瀏覽器
import time
# webdriver.Chrome('驅動絕對路徑')
driver = webdriver.Chrome(r'E:\chromedriver_win32\chromedriver.exe')
driver.get('https://www.baidu.com')
time.sleep(10) # 等待10s
driver.close() # 關閉驅動
selenium驅動瀏覽器輸入
from selenium import webdriver
import time
try:
driver = webdriver.Chrome(r'E:\chromedriver_win32\chromedriver.exe')
driver.get('https://www.baidu.com') # 打開百度
# 通過id查找輸入框
input_tag = driver.find_element_by_id('kw')
input_tag.send_keys('四驅車') # 輸入查找內容
# 通過id查找百度一下按鈕
submit_button = driver.find_element_by_id('kw')
submit_button.click() # 點擊百度一下按鈕
time.sleep(10)
finally: # 無論有沒有異常,都會執行下麵的代碼,關閉驅動
driver.close() # 關閉驅動
selenium模擬登錄
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys # 鍵盤按鍵操作
driver = webdriver.Chrome(r'E:\chromedriver_win32\chromedriver.exe')
try:
driver.implicitly_wait(10) # 等待瀏覽器載入數據10s
driver.get('https://leetcode-cn.com/')
# 通過文本查找登錄按鈕
login_button = driver.find_element_by_link_text('登錄')
login_button.click()
# 通過class查找用戶名輸入框
username = driver.find_element_by_class_name('css-paawy7-BasicInput')
username.send_keys('[email protected]')
# 通過name查找密碼輸入框
password = driver.find_element_by_name('password')
password.send_keys('123456')
password.send_keys(Keys.ENTER) # 直接按回車
time.sleep(10)
finally:
driver.close()
selenium爬取京東商品信息
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys # 鍵盤按鍵操作
driver = webdriver.Chrome(r'E:\chromedriver_win32\chromedriver.exe')
try:
driver.implicitly_wait(10) # 等待瀏覽器載入數據10s
driver.get('https://www.jd.com/')
# 通過id號查找輸入框
goods_input = driver.find_element_by_id('key')
goods_input.send_keys('筆記本電腦')
# 操縱鍵盤 按回車鍵
goods_input.send_keys(Keys.ENTER) # 直接按回車搜索
time.sleep(3) # 等待數據載入完成
# 通過id查找所有商品的父標簽
goods_div = driver.find_element_by_id('J_goodsList')
# 通過class 標簽查找goods_div下的所有li標簽
goods_list = goods_div.find_elements_by_class_name('gl-item')
# print(goods_list)
# 迴圈 獲取li標簽
for goods in goods_list:
# 獲取商品價格文本
# goods_price = goods.find_element_by_link_text('p-price').text
# css屬性選擇器
goods_price = goods.find_element_by_css_selector('.p-price i').text
goods_name = goods.find_element_by_css_selector('.p-name em').text
goods_commit = goods.find_element_by_css_selector('.p-commit a').text
goods_url = goods.find_element_by_css_selector('.p-name a').get_attribute('href')
goods_data = f'''
商品名稱:{goods_name}
商品價格:{goods_price}
評價人數:{goods_commit}
詳情鏈接:{goods_url}
'''
with open('筆記本電腦.txt', 'a', encoding='utf8') as f:
f.write(goods_data)
time.sleep(10)
finally:
driver.close()