python123动物重量排序_Python爬虫图片学习(一)
Python爬蟲學(xué)習(xí)
一、Python安裝與調(diào)用
python官網(wǎng)安裝地址:https://www.python.org/
python幫助手冊:在本機(jī)的路徑C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Doc
創(chuàng)建一個1.py文件,右鍵打開.py文件,用IDLE方式打開。保存后直接run F5運行或者保存后F5運行:輸出效果
hello在十個星號中間
定義一個用戶變量登陸
用ipuut:定義變量值
二、一些定義:
特殊語句:
and 并且
or 或者
not 條件取反
= 賦值
== 比較
> 、< 、!=、 >= 、<=
變量名稱的定義:
不能以數(shù)字開頭(如1name,下劃線可以開頭__)、變量不能帶有特殊符號(下劃線_可以)、變量名稱區(qū)分大小寫、(if、else、elif這些特殊關(guān)鍵字不能作為變量名稱使用)
關(guān)鍵字和內(nèi)建函數(shù)不能作為變量:
import keyword 輸出不能作為變量名的關(guān)鍵字
內(nèi)建函數(shù)不能作為變量名使用,變量名一般是黑色:help(type)可以查看內(nèi)建函數(shù)或者在python幫助手冊里輸入built-in function查看所有內(nèi)建函數(shù)
腳標(biāo)取值的常用形式
name = "my name is wahaha"
print(name[開始腳標(biāo):結(jié)束腳標(biāo)])
print(name[正數(shù)]):從左往右索引值分別為0,1,2,3,4,5...16,超出報錯
print(name[負(fù)數(shù)]):從右往左索引值分別為-1,-2,-3,-4...-17,超出報錯
print(name[0]):輸出m,第一個字符串索引值為0
print(name[-1]):輸出a,最后一個字符串
print(name[1:4]):輸出y n,不輸出結(jié)束腳標(biāo)4的索引值
print(name[:11]):輸出my name is ,輸出往前所有數(shù)據(jù),不輸出結(jié)束腳標(biāo)11的值
print(name[11:]):輸出wahaha,輸出往后所有數(shù)據(jù),包括開始腳標(biāo)
三、Python數(shù)據(jù)結(jié)構(gòu)(列表、字典、元祖、集合):
列表的應(yīng)用
1.列表中的每一個元素都是可變的;
2.列表中的元素是有序的,也就是說每一個元素都有一 個位置;
3.列表可以容納Python中的任何對象
列表 ( list ) c = [ val1,val2,val3] 列表可以容納ython的任何對象
all_in_list=[
1,整型
1.0,浮點型
"a word",字符串
print(1),函數(shù)
True,布爾值
[1,2],列表套列表
(1,2),元祖
{"key":"val"}]字典
列表的增刪改查:insert():插入 remove():刪除 alist[]=""、del:修改
查看
alist = [1,2,3,4]
print(alist[1:3])#輸出[2,3]按索引值查看單個或多個數(shù)據(jù)
增加
insert(索引值,插入數(shù)據(jù))應(yīng)用: 按列表索引值插入,索引值存在則在索引值前增加數(shù)據(jù),索引值不存在則往后添加一個新數(shù)據(jù)(反向索引則往前添加)
alist = [1,2,3,4]#正向索引值1 >>0 反向索引值1 >>-4
alist.insert(2,8)
print(alist)#輸出[1,2,8,3,4,]
刪除
remove(刪除的數(shù)據(jù)): 直接remove(數(shù)據(jù))需要刪除的數(shù)據(jù)
alist = [1,2,'3',4]
alist.remove('3')
print(alist)#輸出[1,2,4] 想刪啥刪啥
del alist[]:按索引值進(jìn)行刪除
alist = [1,2,3,4]
del alist[0:3]
print(alist)#輸出[4] 相當(dāng)于刪除選中索引值的數(shù)據(jù),索引值不存在就不會刪除
修改
alist[索引值]="修改的數(shù)據(jù)"
alist = [1,2,3,4]#正向索引值1 >>0 反向索引值1 >>-4
alist[1]=8
print(alist)#輸出[1,8,3,4,] 按索引值修改,相當(dāng)于修改2為8
alist[0:3]=8
print(alist)#輸出[8,4]按索引值區(qū)間修改,相當(dāng)于把修改的數(shù)據(jù),放入所索引值數(shù)據(jù)區(qū)間內(nèi),即便是修改的數(shù)據(jù)有很多條
列表的索引值取值實例圖片
列表的實際應(yīng)用實例圖片
2. 字典的應(yīng)用
1.字典中數(shù)據(jù)必須鍵值對的形式出現(xiàn),且鍵只能為字符串、數(shù)字、浮點類型
2.邏輯上,鍵是不可重復(fù),鍵重復(fù)以該變量索引值末尾的鍵值對為準(zhǔn)輸出,而值可以重復(fù)
3.鍵是不可修改變換的,但是值可以修改變換(可以是任何對象)
字典的增刪改查
查看
指定鍵查看值
adict = {"a":"123","b":"456","c":"789"}
print(adict["a"])#輸出123 指定鍵取值
增加
update()方法: 往字典內(nèi)添加多條數(shù)據(jù)
adict = {"a":"123","b":"456"}
adict.update({"c":"789","d":"999"})#不要忘了寫大括號
print(adict)#輸出{'a': '123', 'b': '456', 'c': '789', 'd': '999'}
刪除
del adict(需要刪除的鍵): 指定鍵刪除的鍵
adict = {"a":"123","b":"456","c":"789"}
del adict['a']#[]中括號里的鍵如果是字符串必須加引號,其他類型的加不加都行
print(adict)#輸出{'b': '456', 'c': '789'}
修改
通過指定鍵修改值的形式修改
adict = {"a":"123","b":"456","c":"789"}
adict["a"] = 456 #修改為數(shù)字型456,[]中括號里的鍵如果是字符串必須加引號,其他類型的加不加都行
print(adict)#輸出'a': 456, 'b': '456', 'c': '789'}
字典通過鍵取值實例圖片
字典不能通過值取鍵實例圖片
通過字典鍵值對的特殊性,解決賬號登陸時,列表中密碼不對應(yīng)賬戶的問題實例圖片
元祖的應(yīng)用
元祖可以理解成穩(wěn)固版的列表,因為元祖是不可修改的,增刪改都不可以, 但是元祖可以按索引值查看數(shù)據(jù),查看方式和列表相同
查看
atuple = ("opo","12",1,1.036,8,3)
print(atuple[0:3])#輸出('opo', '12', 1)
集合的應(yīng)用
每一個集合的元素都是無序、不重復(fù)的任意對象。可以通過集合去判斷數(shù)據(jù)的從屬關(guān)系, 還可以通過集合把數(shù)據(jù)結(jié)構(gòu)中重復(fù)的元素刪除,集合里邊不能放集合、字典、列表,但可以放元祖
增加
add()方法:去增加一個字符串、數(shù)字、浮點或元祖類型的數(shù)據(jù)
aset = {1,"a",2,2,"2",1.02,"2"}
aset.add(("qq","ww"))
print(aset)#輸出{1, 2, 1.02, ('qq', 'ww'), 'a', '2'},因為是無序的
刪除
把集合中重復(fù)的數(shù)據(jù)刪除
aset = {1,"a",2,2,"2",1.02,"2"}
print(aset)#輸出{1, 2, 1.02, 'a', '2'},里面重復(fù)的內(nèi)容會去掉整合成一個新集合
discard(刪除的值)方法: 指定值刪除某條值數(shù)據(jù)
aset = {1,2,3,4,5}
aset.discard(5)
print(aset)#輸出{1, 2, 3, 4},指定5刪除掉
數(shù)據(jù)結(jié)構(gòu)技巧
sorted()方法:會將列表中同類型的每個元素按長短、大小、字母順序排序,不改變列表內(nèi)容
注意:當(dāng)列表存在不同類型時用此方法會報錯(不適用于不同類型的列表)
alist = ["7","6","5","4","Ba","Bb","bA","aA","3","2","1"]
print(sorted(alist))#輸出['1', '2', '3', '4', '5', '6', '7', 'Ba', 'Bb', 'aA', 'bA']
zip() 方法:會將兩個以上的列表進(jìn)行對應(yīng),就可以用此方法操作
注意:當(dāng)兩個列表元素數(shù)量不等時,以元素數(shù)量少的列表為準(zhǔn)相對應(yīng)
alist = [7,6,5,4,3,2,1]
blist = ["Ba","Bb","bA","aA","3","2","1"]
a_list = sorted(alist)#對列表alistj進(jìn)行順序排序
b_list = sorted(blist)#對列表blistj進(jìn)行順序排序
print(a_list)#輸出[1, 2, 3, 4, 5, 6, 7]
print(b_list)#輸出['1', '2', '3', 'Ba', 'Bb', 'aA', 'bA']
for a,b in zip(a_list,b_list):#a >>a_list b >>b_list,相當(dāng)于for循環(huán)每次循環(huán)會安排序取出一條數(shù)據(jù)進(jìn)行輸出
print(a,"is",b)#這個子語句需要縮進(jìn),若不縮進(jìn)會報錯
#輸出
1 is 1
2 is 2
3 is 3
4 is Ba
5 is Bb
6 is aA
7 is bA
sorted()與zip()方法實例圖片
enumerate()函數(shù)的運用
默認(rèn)情況下循環(huán)列表獲取元素索引值:
a = ["a","b","c","d"]
for num,a in enumerate(a):#num的值對應(yīng)索引值,默認(rèn)為0,相當(dāng)于enumerate(a)=[0>"a",1>"b",2>"c",3>"d"]相對應(yīng)
print(a,"is",num)#所以fo循環(huán)中 num對應(yīng)的是索引值0,a對應(yīng)的是列表中元素
#輸出:
a is 0
b is 1
c is 2
d is 3
修改索引值情況下循環(huán)列表獲取元素索引值:
a = ["a","b","c","d"]
for num,a in enumerate(a,10):#num的值對應(yīng)索引值,默認(rèn)為0,相當(dāng)于enumerate(a)=[10>"a",11>"b",12>"c",13>"d"]相對應(yīng)
print(a,"is",num)#所以fo循環(huán)中 num對應(yīng)的是索引值0,a對應(yīng)的是列表中元素
#輸出
a is 10
b is 11
c is 12
d is 13
enumerate()函數(shù)獲取元素列表索引值用法實例圖片
6. **查看類型的屬性與幫助內(nèi)容**
可以通過某些特殊內(nèi)建函數(shù)去查看模塊或者函數(shù)方法的幫助信息
help():查看類型、模塊幫助信息,查看的信息全面
type():查看類型,丟進(jìn)去一個模塊或方法
dir(): 查看類型的屬性和函數(shù)方法,
以random模塊為例,查看類型的屬性與幫助內(nèi)容實例圖片
四、python推導(dǎo)式的運用
python之列表推導(dǎo)式的運用:
首先得知道randge()函數(shù)的運用:
range(a,b,c)
a:計數(shù)從a開始,默認(rèn)為0,當(dāng)range(5),相當(dāng)于range(0,5)
b:計數(shù)到b結(jié)束,但不包括5,當(dāng)range(0,5),輸出的是[0,1,2,3,4]
c:步長值,默認(rèn)為1,相當(dāng)每隔一個取一個。當(dāng)range[0,8,2],輸出的是[0,2,4,6]
append() 方法用于在列表末尾添加新的對象。
range()函數(shù)的運用,python之列表推導(dǎo)式運用
python之列表推導(dǎo)式普通寫法:
添加了步長值的用法
a = []
for i in range(1,8,2):#print(a)在for循環(huán)外的用法:每隔兩位取值進(jìn)入for循環(huán),相當(dāng)于每次for循環(huán)從range()中按步長值取出數(shù)字,返回給a列表,當(dāng)循環(huán)完成后,輸出的就是range(1,8)中取出來的所有值的a列表
a.append(i)#append()方法相當(dāng)于給a列表添加新數(shù)據(jù)
print(a)#輸出的是[1, 3, 5, 7]
print(a)在for循環(huán)外的用法:
a = []
for i in range(1,8):#print(a)在for循環(huán)外的用法:相當(dāng)于每次for循環(huán)從range()中值取出數(shù)字,返回給a列表,當(dāng)循環(huán)完成后,輸出的就是range(1,8)中取出來的所有值的a列表
a.append(i)
print(a) #輸出的是[1, 2, 3, 4, 5, 6, 7],如果是range(8)輸出的是[0, 1, 2, 3, 4, 5, 6, 7]
print(a)在for循環(huán)內(nèi)的用法:
a = []
for i in range(1,8):#print(a)在for循環(huán)內(nèi)的用法,相當(dāng)于每次for循環(huán)從range(1,8)中取出數(shù)字,依次將range(1,8)取出來的值放入a列表中,每次a列表的值會從原來的基礎(chǔ)上增加一個值,每一次循環(huán)輸出一次a列表
a.append(i)
print(a)
#輸出
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
python之列表推導(dǎo)式解析式:
b = [i for i in range(1,8)] #for i rang(1,8)將[1,2,3,4,5,6,7]的值傳給了i,i再將值傳遞給for前面的i,注意:兩個i的變量必須相同,相當(dāng)于定義了for前邊的i
print(b) #輸出的是[1, 2, 3, 4, 5, 6, 7]
python之列表推導(dǎo)式實例圖片:range()函數(shù)用法
enumerate()函數(shù):循環(huán)列表時獲取元素的索引值(也可以自己指定索引值)
enumerate(list,b)
list: 列表
b: 默認(rèn)從0開始取,但是可以指定索引值從第幾個去
python之字典推導(dǎo)式
字典推導(dǎo)式的運用
adict = {i:i+1 for i in range(1,6)} #for循環(huán)將得到的數(shù)據(jù)傳給i ,i再將得到的數(shù)據(jù)傳for前面的i:i+1
print(adict)#輸出{1: 2, 2: 3, 3: 4, 4: 5, 5: 6}
理解下面這個for循環(huán)就好理解上面字典推導(dǎo)式了:
adict = {}
for i in range(1,6):
adict.update({i:i+1})#{}大括號不要忘記,相當(dāng)for循環(huán)將range(1,6)得到的數(shù)據(jù)放入adict字典中
print(adict)#輸出{1: 2, 2: 3, 3: 4, 4: 5, 5: 6}
python之字典推導(dǎo)式實例圖片
五、if 條件判斷語句:
if 條件:
子語句(子語句一定要有4個空格縮進(jìn))
if 條件 (多個條件可以在if后面加 and password ==“123”:) 子語句(子語句一定要有4個空格條件成立執(zhí)行)
else: 子語句(條件不成立執(zhí)行)
多分支條件語句
六、循環(huán)語句
while循環(huán) 、for循環(huán)
利用循環(huán)制作小游戲
猜一次:小游戲,看看能否猜中隨機(jī)值
用if循環(huán)去做這個小游戲
猜十次:小游戲,看看能否猜中隨機(jī)值
while循環(huán):根據(jù)條件進(jìn)行循環(huán)(條件滿足跑到死馬)
用while循環(huán)作弊,可以容錯十次(缺點:你得玩十次,猜對了還得往下猜)
break:猜中了立即跳出循環(huán):
作弊手段智能化,猜對了就不用再假惺惺去猜了,直接跳循環(huán)
break的應(yīng)用:終極關(guān)閉程序
終止實例代碼:
while True:
num=int(input('請輸入數(shù)字'))
if num<50:
print('數(shù)字小于50,繼續(xù)判斷他是不是小于0')
if num<0:
print('數(shù)字小于0')
break
elif num>50:
print('數(shù)字大于50,繼續(xù)判斷他是不是大于100')
if num>100:
print('數(shù)字大于100')
break
管你break在第幾層,只要運行break這個循環(huán)得停止
continue:結(jié)束此次循環(huán),重新開始循環(huán)
continue被運行了,它下面代碼不再執(zhí)行,重新開始循環(huán),知道這個while循環(huán)條件不在滿足
for循環(huán):根據(jù)變量賦值的次數(shù)進(jìn)行循環(huán)
字符串、列表、元組、字典在for循環(huán)中依次取值實例圖片
range()函數(shù)在for循環(huán)中依次循環(huán)取值示例圖片
利用for循環(huán)將列表的值取出來并進(jìn)行首尾去除特殊符號實例圖片
七、文件對象的讀取
f=open("E:\\aaaa\\a.txt","rb") open("讀取文件的絕對路徑","rb")r為讀 b為二進(jìn)制,以二進(jìn)制的方式
去讀取a.txt的內(nèi)容,然后將內(nèi)容賦值給變量f
print(f.read())打印f.read()讀取a.txt的內(nèi)容
f.close關(guān)閉內(nèi)存
f.seek(0,0)讀取光標(biāo)移會初始位置
f.readline() 按行讀取
f.readlines() 以列表的方式讀取
在cmd默認(rèn)登陸目錄(Windows登陸時的home目錄)中建立一個名叫test.txt的文件寫入內(nèi)容
第一步:建立文件對象(打開冰箱門)
第二步:讀取文件(把大象拿出來)
read函數(shù)讀取文件
初次讀取
第二次讀取需要:f.seek(0,0) 將光標(biāo)移回起始位置,再次f.read()就可以讀取內(nèi)容了
f.readline() 按行讀取 f.readlines() 以列表的方式讀取
第三步:關(guān)閉文件(關(guān)上冰箱門)
f.close() 函數(shù) 因為前面open() 它是占用了內(nèi)存的,不關(guān)閉內(nèi)存不會釋放,影響運行
知識斷點:判斷a.txt里英文文章中單詞出現(xiàn)的次數(shù)
代碼:
目的:判斷a.txt里英文文章中單詞出現(xiàn)的次數(shù)
下面函數(shù)的方法:
strip():可以指定字符去除字符串的首尾字符
string.punctuation:鍵盤上的各種特殊字符
lower():將大寫變成小寫
split():指定分隔符分割字符串,默認(rèn)以空為分隔符
count():統(tǒng)計某字符在在字符串里出現(xiàn)的次數(shù)
import string
path = "C:\\Users\\Administrator\\Desktop\\a.txt"
with open(path,"r",encoding="UTF-8") as text:
#利用 with as 語句以讀取的方式打開path文件,等于 text = open(path,"r",encoding="UTF-8")
#并設(shè)置編碼為utf-8,不然可能會報錯
words_list = [words.strip(string.punctuation).lower() for words in text.read().split()]
#通過列表推導(dǎo)式將text的內(nèi)容讀取并分割成多個字符串,并通過for循環(huán)放入words中
#words將被傳送到for前面的words中進(jìn)行首尾去除特殊符號并且全部換成小寫
#最后,處理干凈的多個單詞列表賦值給words_list
words_index = set(words_list) #將列表轉(zhuǎn)換成集合(因為下面得字典推導(dǎo)式需要用到大括號)
#為啥不轉(zhuǎn)換成字典?因為字典的鍵值對,你得先有值啊!
count_dict = {index:words_list.count(index) for index in words_index}
#轉(zhuǎn)換成字典有利于查看單詞與單詞出現(xiàn)的次數(shù)
#將集合里的單詞們賦值給index
#利用count()函數(shù)統(tǒng)計words_list列表里單詞出現(xiàn)的次數(shù),即單詞:單詞次數(shù)
for word in sorted(count_dict,key=lambda x:count_dict[x],reverse=False):
##對count_dict進(jìn)行排序
#key = lamdba x:count_list[x],這里意思是以字典的值作為排序標(biāo)準(zhǔn)
#reverse中True是降序,Flase是升序(默認(rèn))
print("{}--{}times".format(word,count_dict[word]))
#format()格式化函數(shù)
判斷a.txt里英文文章中單詞出現(xiàn)的次數(shù)實例圖片
八、文件對象寫入
實現(xiàn)拷貝文件,打開兩個文件。一個用讀的形式打開需要拷貝的文件,另一個用寫的方式打開需要生成的文件,把讀取文件交給寫入的文件,最后關(guān)閉兩個文件
往a.txt文件寫like,(a.txt存在會替換里面內(nèi)容,不存在會創(chuàng)建一個a.txt)
f=open("E:\\aaaa\\1.txt","wb") 以寫的方式打開a.txt
f.writelines([b"li",b"ke"]) 寫入內(nèi)容
f.close()關(guān)閉
將a.txt的內(nèi)容復(fù)制到b.txt,b.txt不存在則創(chuàng)建一個b.txt,存在則替換內(nèi)容
rf = open("E:\\aaaa\\a.txt","rb") 以讀取方式打開,賦值rf
wf = open("E:\\bbbb\\b.txt","wb")以寫入方式打開,賦值wf,創(chuàng)建-替換
data = rf.read()rf調(diào)用read()函讀取a.txt內(nèi)容然后賦值data
wf.write(data)wf調(diào)用write()函數(shù)將data內(nèi)容寫入到b.txt里(因為打開方式是寫入)
rf.close()關(guān)閉
wf.close()關(guān)閉
當(dāng)限制讀取數(shù)據(jù)是可以利用循環(huán)一點點讀取
rf = open("E:\\aaaa\\a.txt","rb")以讀取方式打開,賦值rf
wf = open("E:\\bbbb\\b.txt","wb")以寫入方式打開,賦值wf,創(chuàng)建-替換
while True: 死循環(huán)
data = rf.read(110)每次讀取110字節(jié)數(shù)
if data == b"":當(dāng)data讀取到空即讀取完,就break跳出死循環(huán)
break
wf.write(data)每次循環(huán)都往b.txt里拼接內(nèi)容
rf.close()關(guān)閉
wf.close()關(guān)閉
第一步:打開文件(開冰箱)
在用戶家目錄中建立一個tsetone.txt的文件寫入三行內(nèi)容
2. 第二步:寫入文件內(nèi)容(放大象)
拷貝一個文件,將testone.txt文件的內(nèi)容拷貝成testtow.txt(one的內(nèi)容不能變化刪除,而是產(chǎn)生一個新的tow文件)
通過文件對象cmd.exe對命令工具做復(fù)制
保存文件(關(guān)冰箱門)
f.close() 函數(shù) 因為前面open() 它是占用了內(nèi)存的,不關(guān)閉內(nèi)存不會釋放,影響運行
九、函數(shù)和模塊的定義
取隨機(jī)值:
import random #調(diào)用模塊 從此文件調(diào)用模塊c:\users\administrator\appdata\local\programs\python\python37\lib\random.py
alist= ["tom","timi","niko"] #賦值
print(alist[random.randint(1,2)]) #根據(jù)索引值隨機(jī)打印出變量alist的內(nèi)容,需要根據(jù)alist的數(shù)據(jù)來指定,不然會報錯
print(random.choice(alist)) #不用指定alist的數(shù)據(jù)就可以隨機(jī)取值
創(chuàng)建模塊
該模塊可以被調(diào)用 ( 用import調(diào)用)
在模塊中包含一個功能模塊,函數(shù)的作用是返回20個星號
1·定義的模塊名稱不能以數(shù)字開頭
2·不能和默認(rèn)的模塊重名
注意:調(diào)用方法函數(shù)必須有一個變量去接受方法函數(shù)的返回值,然后輸出這個變量得到的就是返回的內(nèi)容
調(diào)用創(chuàng)建的模塊
調(diào)用模塊和打印模塊必須在同一個目錄或者調(diào)用模塊在此文件中(c:\users\administrator\appdata\local\programs\python\python37\lib\random.py )
十、函數(shù)的形參實參與異常捕獲
函數(shù)的形參和實參
函數(shù)的形參:在定義函數(shù)的時候,給定函形參變量,然后傳參的時候傳上兩個變量去對應(yīng),那么形參變量就變?yōu)樯蟼鞯淖兞繉?dǎo)入函數(shù)中。
如:
def division (a,b) # a和b是給定的變量形參
num = a / b
return num
numa = 20
numb = 5
endnum = division(numa,numb) # 上傳到函數(shù)里面取代 a,b
print(endnum)
函數(shù)的實參:就是在定義函數(shù)的時候給了一個指定的值,比如def division(1,2) 就是實參
函數(shù)的異常捕獲(找bug)
函數(shù)的異常捕獲:預(yù)判代碼某個位置可能會報錯,提前將這個報錯屏蔽,然后由開發(fā)者去進(jìn)行提示
try (被捕獲的子語句)可能出現(xiàn)運行錯誤的語句: 利用這個關(guān)鍵字去捕獲異常
except (異常類型1,異常類型2,...)報錯信息: 關(guān)鍵字除非,意思是如果出現(xiàn)這個報錯將由它打印出異常的提示信息,更為友好直觀
小技巧:expcept:不捕獲異常類型信息也是可以的
當(dāng)代碼運行出現(xiàn)異常,用try捕獲代碼,然后用except提示友好的異常信息或者直接pass退出
異常捕獲小技巧:
十一、面向?qū)ο缶幊?/p>
面向?qū)ο缶幊滔鄬?yīng)的是面向過程編程(順序,按順序運行)
類 class
生物 >>動物 >>靈長類動物 >>人類 >> 男人 >>老人…(無限套娃,萬物皆可為類)
當(dāng)定義一個類的時候,系統(tǒng)會開辟一個內(nèi)存空間,里面存儲屬性和方法
類的命名規(guī)則:大小駝峰命名法 兩個單詞首字母大寫 兩個單詞首字符大寫
屬性:由變量組成
方法:由函數(shù)組成,實現(xiàn)功能,函數(shù)(self)括號內(nèi)必須寫self
創(chuàng)建對象:就是使用一個類,將類實例化,同一個類可以創(chuàng)建多個對象,類相當(dāng)于模板
魔術(shù)方法:雙下劃線(__init__初始化方法),滿足即調(diào)用
self 的運用,代表實例化對象本身
將更多需要設(shè)置修改的東西放入類中
python之%s、%d、%f的用法
%s字符串 %d數(shù)字 %f浮點數(shù)
十二、爬蟲獲取網(wǎng)頁圖片
python正則表達(dá)式
正則使用最多的是findall函數(shù):
單個字符串匹配:
. 匹配單個任意字符
[] 寫在中括號里面的內(nèi)容會被逐一單個匹配
\d 匹配單個數(shù)字
\w 匹配 [0-9a-zA*Z_]
\s 匹配空白字符 空格 tab鍵
多個字符串匹配:
直接匹配 字符串
|: 分隔符應(yīng)用 匹配兩個不同的字符串 字符串|字符串
*: 匹配左鄰字符出現(xiàn)0次或者多次
+:左鄰字符出現(xiàn)一次或者多次
?:左鄰字符出現(xiàn)0次或者1次
{2.4}:定義左鄰字符出現(xiàn)次數(shù) 2-3此次都會匹配
^:是否以某字符串開頭
$:是否以某字符串結(jié)尾
():分組保存 \數(shù)字
正則表達(dá)式分組保存,參考:https://www.cnblogs.com/erichuo/p/7909180.html
正則表達(dá)式中,group()用來提出分組截獲的字符串,()用來分組
import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整體
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456
需要使用python中的urllib庫爬取網(wǎng)頁圖片
第一步:獲取網(wǎng)頁的html代碼
第二步:偽造一個user_agent頭,不能會被封ip
第三步:通過正則表達(dá)式過濾出圖片信息
第一步:獲取網(wǎng)頁的源代碼:
import urllib.request:通過request模擬瀏覽器發(fā)送請求
__init_:初始化方法,即實例化對象時就使用這個方法給對象配置基本功能
urllib.request.urlopen():指定一個url,默認(rèn)以GET方式發(fā)送請求
read():讀取內(nèi)容
add_hearder:偽造一個user-agent
第二步:偽造user-agent
第三步:利用正則過濾圖片信息并把圖片下載下來
總結(jié)
以上是生活随笔為你收集整理的python123动物重量排序_Python爬虫图片学习(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为余承东:智界 S7 泊车代驾 Bet
- 下一篇: python http协议获取对方的ip