Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目11 綜合項(xiàng)目-字符串與Python 爬蟲基礎(chǔ)_第1頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目11 綜合項(xiàng)目-字符串與Python 爬蟲基礎(chǔ)_第2頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目11 綜合項(xiàng)目-字符串與Python 爬蟲基礎(chǔ)_第3頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目11 綜合項(xiàng)目-字符串與Python 爬蟲基礎(chǔ)_第4頁
Python程序設(shè)計(jì)基礎(chǔ)項(xiàng)目化教程 課件 項(xiàng)目11 綜合項(xiàng)目-字符串與Python 爬蟲基礎(chǔ)_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

筐魚梧領(lǐng)鳳峽匪跑腳凡輔乒蹤勿久褂舟嬰襲剪肚爹倫甄嘯鐐娟附卉態(tài)再罵廣東農(nóng)工商職業(yè)技術(shù)學(xué)院PPT模板-精美原創(chuàng)畢業(yè)論文答辯廣東農(nóng)工商職業(yè)技術(shù)學(xué)院PPT模板-精美原創(chuàng)畢業(yè)論文答辯項(xiàng)目11綜合項(xiàng)目——字符串與Python爬蟲基礎(chǔ)目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目介紹項(xiàng)目背景爬蟲是一個(gè)程序,它的任務(wù)是從給出的一組種子網(wǎng)址(URL)開始爬取網(wǎng)頁,并通過網(wǎng)頁間的鏈接爬取更多的網(wǎng)頁,根據(jù)爬蟲任務(wù)的需求,最終可能會(huì)爬取整個(gè)互聯(lián)網(wǎng)的網(wǎng)頁。爬蟲的最終目的是按照用戶需求獲取網(wǎng)頁中的內(nèi)容。在大數(shù)據(jù)相關(guān)任務(wù)中,主要被用來進(jìn)行數(shù)據(jù)獲取和提取,以及一定的數(shù)據(jù)預(yù)處理功能。本項(xiàng)目圍繞爬蟲任務(wù),介紹爬蟲所需的字符串和正則表達(dá)式等相關(guān)概念,最后為大家展示一個(gè)完整的爬蟲任務(wù)。項(xiàng)目介紹項(xiàng)目規(guī)劃01熟練掌握字符串的概念和各種用法,以及Python標(biāo)準(zhǔn)庫string的使用。02了解正則表達(dá)式的概念和用法03能寫出具備一定功能的爬蟲目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目目標(biāo)知識(shí)目標(biāo)1掌握字符串的概念2掌握Python標(biāo)準(zhǔn)庫string的函數(shù)和常量3了解正則表達(dá)式和元字符的概念項(xiàng)目目標(biāo)能力目標(biāo)1掌握字符串和string類的使用2會(huì)使用正則表達(dá)式和元字符3能運(yùn)用以上知識(shí)完成簡(jiǎn)單爬蟲的設(shè)計(jì)目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施項(xiàng)目準(zhǔn)備1.字符串編碼字符要在計(jì)算機(jī)中存儲(chǔ)和顯示,就要對(duì)其進(jìn)行編碼。最初,普遍使用ASCII(AmericanStandardCodeforInformationInterchange,美國信息交換標(biāo)準(zhǔn)代碼),但它主要用于現(xiàn)代英語和其他西歐語言。Python3默認(rèn)使用UTF-8編碼。經(jīng)常會(huì)在Python源文件的開頭看到一行注釋:1)編碼#coding=utf-8項(xiàng)目準(zhǔn)備1.字符串編碼Python3支持兩種類型字符串:str類型(支持Unicode編碼)和bytes類型,兩種類型之間可以相互轉(zhuǎn)換。2)Python字符串類型項(xiàng)目準(zhǔn)備1.字符串編碼2)Python字符串類型>>>s='人'>>>s'人'>>>type(s) #s是str類型字符串<class'str'>>>>s_gbk=s.encode('gbk') #編碼成bytes類型,gbk編碼格式>>>s_gbkb'\xc8\xcb'>>>type(s_gbk) #s_gbk是bytes類型字符串<class'bytes'>>>>s_utf8=s.encode('utf-8') #編碼成bytes類型,utf-8編碼格式>>>s_utf8b'\xe4\xba\xba'#注意!utf-8編碼用3個(gè)字節(jié)來表示1個(gè)漢字>>>type(s_utf8) #s_utf8是bytes類型字符串<class'bytes'>>>>s_gbk_de=s1.decode('gbk') #使用gbk進(jìn)行解碼>>>s_gbk_de'人'>>>type(s_gbk_de) #s_gbk_de是str類型<class'str'>>>>s_utf8_de=s2.decode('utf-8')#使用utf-8進(jìn)行解碼>>>s_utf8_de'我'>>>type(s_utf8_de) #s_utf8_de是str類型<class'str'>>>>s_asc=s.encode('ascii') #中文字符串不能以ascii編碼Traceback(mostrecentcalllast):File"<pyshell#34>",line1,in<module>s_asc=s.encode('ascii')UnicodeEncodeError:'ascii'codeccan'tencodecharacter'\u6211'inposition0:ordinalnotinrange(128)項(xiàng)目準(zhǔn)備2.構(gòu)造字符串Python中,構(gòu)造字符串主要有兩種方式:引號(hào)(單引號(hào)、雙引號(hào)或三引號(hào))和str()函數(shù)。1)字符串構(gòu)造>>>a='PythonWorld!''PythonWorld!'>>>a=''PythonWorld!''''PythonWorld!''>>>a=str('PythonWorld!')'PythonWorld!'項(xiàng)目準(zhǔn)備2.構(gòu)造字符串如果代碼中的字符串包含了單引號(hào),且不用轉(zhuǎn)義字符,那么整個(gè)字符串就要用雙引號(hào)來構(gòu)造,否則就會(huì)出錯(cuò)。如果代碼中的字符串包含了雙引號(hào),且不用轉(zhuǎn)義字符,那么整個(gè)字符串要用單引號(hào)來構(gòu)造。1)字符串構(gòu)造>>>"Let'sgo!""Let'sgo!">>>print("Let'sgo!")#print()函數(shù)輸出更直觀Let'sgo!>>>'Let'sgo!'SyntaxError:invalidsyntax>>>'"Helloworld!",hesaid.''"Helloworld!",hesaid.'>>>print('"Helloworld!",hesaid.')#print()函數(shù)輸出更直觀"Helloworld!",hesaid.項(xiàng)目準(zhǔn)備2.構(gòu)造字符串'Let'sgo!'的語法錯(cuò)誤可以用下面方法解決:2)轉(zhuǎn)義字符>>>'Let\'sgo!'#\'為轉(zhuǎn)義字符,代表單引號(hào)。\為轉(zhuǎn)義標(biāo)識(shí)。"Let'sgo!">>>print('Let\'sgo!')Let'sgo!項(xiàng)目準(zhǔn)備2.構(gòu)造字符串轉(zhuǎn)義字符以“\”開頭,后接某些特定的字符或數(shù)字。Python中常用的轉(zhuǎn)義字符如表所示。2)轉(zhuǎn)義字符轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義轉(zhuǎn)義字符含義\(行尾)續(xù)行符\n換行符\f換頁符\\一個(gè)反斜杠\\r回車\ooo3位8進(jìn)制數(shù)ooo對(duì)應(yīng)的字符\’單引號(hào)’\t橫向(水平)制表符\xhh2位16進(jìn)制數(shù)hh對(duì)應(yīng)的字符\”雙引號(hào)”\v縱向(垂直)制表符\uhhhh4位16進(jìn)制數(shù)hhhh表示的Unicode字符項(xiàng)目準(zhǔn)備2.構(gòu)造字符串Python提供了比轉(zhuǎn)義字符更簡(jiǎn)潔的保留字符格式的方法——原始字符。在字符串前面加上字母r或R,所有的字符都是原始的本義而不會(huì)進(jìn)行任何轉(zhuǎn)義。3)原始字符>>>print('''"What'sup?""Iamfine"''')"What'sup?""Iamfine"項(xiàng)目準(zhǔn)備2.構(gòu)造字符串有時(shí)字符串需要存儲(chǔ)大段字符,不僅包括字符信息,還包括格式信息,如縮進(jìn)、換行、空行等。Python提供了三重引號(hào)字符串。三重引號(hào)將保留所有字符串的格式信息。如字符串跨越多行,行與行之間的回車符、引號(hào)、制表符或者其他任何信息,都將保存下來。在三重引號(hào)中可以自由的使用單引號(hào)和雙引號(hào)。4)三重引號(hào)字符串>>>print('''"What'sup?""Iamfine"''')"What'sup?""Iamfine"項(xiàng)目準(zhǔn)備3.格式化字符串字符串格式化涉及到兩個(gè)概念:格式和格式化。格式:以%開頭。格式化:運(yùn)算符用%表示用對(duì)象代替格式串中的格式。格式和格式化結(jié)合,得到一個(gè)任意形式的字符串。1)字符串格式控制項(xiàng)目準(zhǔn)備3.格式化字符串注意,格式化字符串由兩部分組成,"內(nèi)是格式串,"之后的%后面是符號(hào)表。格式串中[]中的內(nèi)容是可選內(nèi)容。"內(nèi)的%與后面的字符組成了格式符。常見格式串如表所示。1)字符串格式控制格式說明%c格式化字符或編碼%s格式化字符串%d,%i格式化整數(shù)%u格式化無符號(hào)整數(shù)%%字符%%o格式化八進(jìn)制數(shù)%x格式化十六進(jìn)制數(shù)%f、%F格式化浮點(diǎn)數(shù),可指定小數(shù)位數(shù)%e、%E用科學(xué)計(jì)數(shù)法(基底e、基底E)格式化浮點(diǎn)數(shù)%g、%G根據(jù)值的大小采用科學(xué)計(jì)數(shù)法(基底e、基底E)或者浮點(diǎn)數(shù)形式格式化浮點(diǎn)數(shù)項(xiàng)目準(zhǔn)備3.格式化字符串也可以一次格式化多個(gè)對(duì)象,示例代碼如下:1)字符串格式控制>>>name='Jim'>>>age=20>>>'Mynameis%s,Iam%dyearsold.'%(name,age)'MynameisJim,Iam18yearsold.'項(xiàng)目準(zhǔn)備3.格式化字符串可以通過設(shè)置圖中m和n的值來控制格式化字符串的寬度和精度。2)寬度和精度控制>>>'%f'%3.141593 #單獨(dú)的%f默認(rèn)保留6位小數(shù)'3.141593'>>>'%.2f'%3.141593 #指定保留2位小數(shù)'3.14'>>>'%9.2f'%3.141593 #寬度9位,保留2位小數(shù),空位填空格'3.14'>>>'%09.2f'%3.141593 #寬度9位,保留2位小數(shù),空位填0'000003.14'>>>'%+09.2f'%3.141593 #寬度9位,保留2位小數(shù),正數(shù)加正號(hào),空位填0'+00003.14'>>>'%-9.2f'%-3.141593#寬度9位,保留2位小數(shù),空位填空格,左對(duì)齊輸出'-3.14'項(xiàng)目準(zhǔn)備3.格式化字符串3)進(jìn)位制和科學(xué)計(jì)數(shù)法>>>d=123456>>>x='%o'%d #轉(zhuǎn)換為八進(jìn)制串>>>x'361100'>>>do='%#o'%d #八進(jìn)制時(shí)前添加0o>>>do'0o361100'>>>dx='%x'%d #轉(zhuǎn)換為十六進(jìn)制串>>>dx'1e240'>>>dx_pre='%#x'%d #16進(jìn)制數(shù)前添加0x>>>dx_pre'0x1e240'>>>de='%e'%d #轉(zhuǎn)換為科學(xué)計(jì)數(shù)法串,基底e>>>de'1.234560e+05'>>>dE='%E'%d#基底E'1.234560E+05'>>>d2=12345.678#浮點(diǎn)數(shù)>>>dF='%F'%d2>>>dF'12345.678000'>>>df='%f'%d2>>>df'12345.678000'>>>dg='%g'%d2 #采用浮點(diǎn)數(shù)形式>>>dg'12345.7'>>>dG='%G'%d2 #采用浮點(diǎn)數(shù)形式>>>dG'12345.7'>>>dGe='%.4G'%d2 #采用科學(xué)計(jì)數(shù)法形式,基底E>>>dGe'1.235E+04'項(xiàng)目準(zhǔn)備3.格式化字符串3)進(jìn)位制和科學(xué)計(jì)數(shù)法輸出九九乘法表foriinrange(1,10):forjinrange(1,i+1):print("%d*%d=%-4d"%(i,j,i*j),end="")print()項(xiàng)目準(zhǔn)備3.格式化字符串format()方法用{}和:來代替%方式。4)格式化字符串的format()方法項(xiàng)目準(zhǔn)備3.格式化字符串format()的典型用法如下:4)格式化字符串的format()方法>>>'我叫{},今年{}歲'.format('李梅',20)#按參數(shù)位置格式化'我叫李梅,今年20歲'>>>'我叫{1},今年{0}歲'.format(20,'李梅')#按參數(shù)索引格式化'我叫李梅,今年20歲'>>>my=['李梅',20]#列表做參數(shù)>>>'我叫{},今年{}歲'.format(*my)#*列表名'我叫李梅,今年20歲'>>>'我叫{0[0]},今年{0[1]}歲'.format(my)#列表索引'我叫李梅,今年20歲'>>>'我叫{name},今年{age}歲'.format(name='李梅',age=20)#關(guān)鍵參數(shù)'我叫李梅今年20歲'>>>my={'name':'李梅','age':20}#字典>>>'我叫{name},今年{age}歲'.format(**my)#**字典名'我叫李梅,今年20歲'項(xiàng)目準(zhǔn)備3.格式化字符串format()可以如%那樣對(duì)進(jìn)制和顯示格式進(jìn)行控制。4)格式化字符串的format()方法>>>'{0:.2f}'.format(1/3)#保留兩位小數(shù)'0.33'>>>'{0:b}'.format(8)#二進(jìn)制'1000'>>>'{0:o}'.format(8)#八進(jìn)制'10'>>>'{0:x}'.format(18)#十六進(jìn)制'12'>>>'{0:#x}'.format(10)#十六進(jìn)制前加0x'0xa'>>>'{:,}'.format(1234567890) #千分位格式化'1,234,567,890'>>>'{0:*>10}'.format(18) #右對(duì)齊'********18'>>>'{0:*<10}'.format(18) #左對(duì)齊'18********'>>>'{0:*^10}'.format(18) #居中對(duì)齊'****18****'>>>'{0:*=10}'.format(-18) #*放在-和18中間'-*******18'>>>'{0:_},{0:#x}'.format(9999) #_作為分隔符'9_999,0x270f'項(xiàng)目準(zhǔn)備3.格式化字符串Python提供了相較format()方法更簡(jiǎn)化的表達(dá)方法。5)f前綴>>>name='李梅'>>>age=20>>>f'我叫{name},今年{age}歲''我叫李梅,今年20歲'項(xiàng)目準(zhǔn)備4.截取字符串截取字符串是常用的文本處理技巧。Python提供了兩種字符串截取的方法:索引str[index],只能取出單個(gè)字符串。切片str[[start]:[end]:[step]],取出一片字符??梢詫⒆址乃饕颓衅僮骼斫鉃榕c列表的相應(yīng)操作一樣。項(xiàng)目準(zhǔn)備4.截取字符串>>>t='teacher'>>>t[0]'t'>>>t[-1]'r'>>>t[1:3]#取出位置為1到位置為2的字符,不包括位置3的字符'ea'>>>t[:3]#取出從頭至位置為2的字符'tea'>>>t[-2:]#取出從倒數(shù)第2個(gè)位置開始的所有字符'er'>>>t[:]#取出全部字符'teacher'>>>t[::2]#步長為2'tahr'>>>t[0]='s'#字符串屬于不可變序列類型,不支持字符串修改Traceback(mostrecentcalllast):File"<pyshell#7>",line1,in<module>t[0]='s'TypeError:'str'objectdoesnotsupportitemassignment項(xiàng)目準(zhǔn)備5.字符串常用內(nèi)置函數(shù)如序列一樣,Python也提供了很多用于操作字符串的內(nèi)置函數(shù),如:len()、ord()、chr()、max()、min()等。>>>s='Iamsohappytoday!'>>>len(s)#字符串長度20>>>max(s)#最大字符'y'>>>min(s)#最小字符''>>>ord('I')#獲取該字符的Unicode碼73>>>chr(73)#把編碼轉(zhuǎn)換為對(duì)應(yīng)的字符'I'>>>ord('興')20850>>>chr(20850)#獲取編碼對(duì)應(yīng)字符'好'項(xiàng)目準(zhǔn)備6.字符串常用方法lower()upper()功能:lower()方法將大寫字母轉(zhuǎn)換為小寫字母,其他字符不變,并返回新字符串。upper()方法將小寫字母轉(zhuǎn)換為大寫字母,其他字符不變,并返回新字符串。2)大寫小寫字母相關(guān)操作>>>'Hello'.lower()'hello'>>>'Hello'.lower()'HELLO'項(xiàng)目準(zhǔn)備6.字符串常用方法center(width[,fillchar])ljust(width[,fillchar])rjust(width[,fillchar])說明:width,指定寬度;fillchar,填充的字符,默認(rèn)為空格。功能:返回一個(gè)寬度為width的新字符串,原字符串居中(左對(duì)齊或右對(duì)齊)出現(xiàn)在新字符串中,如果width大于字符串長度,則使用fillchar進(jìn)行填充。1)填充字符串>>>'Hello'.center(8) #居中對(duì)齊,以空格填充'Hello'>>>'Hello'.center(8,"*") #居中對(duì)齊,以*填充'*Hello**'>>>'Hello'.ljust(8,"!") #右對(duì)齊,以!填充'Hello!!!'>>>'Hello'.rjust(8,"-") #左對(duì)齊,以-填充'---Hello'項(xiàng)目準(zhǔn)備6.字符串常用方法capitalize()title()swapcase()功能:capitalize()方法將字符串首字母轉(zhuǎn)換為大寫形式,其他字母轉(zhuǎn)換為小寫形式。title()方法將每個(gè)單詞的首字母轉(zhuǎn)換為大寫形式,其他部分的字母轉(zhuǎn)換為小寫形式。swapcase()字符將大小寫互換。均返回新字符串,原字符串對(duì)象不做任何修改。2)大寫小寫字母相關(guān)操作>>>'happyspringfestival!'.capitalize()'Happyspringfestival!'>>>'happyspringfestival!'.capitalize()'HappySpringFestival!'>>>'happyspringfestival!'.capitalize()'HAPPYSPRINGFESTIVAL!'項(xiàng)目準(zhǔn)備6.字符串常用方法islower();isupper();isdigit()。功能:測(cè)試字符串是否為小寫、大寫、數(shù)字。如果是,則返回True;否則返回False。2)大寫小寫字母相關(guān)操作>>>s='hello'>>>s.islower()True>>>s.isupper()False>>>s='7890'>>>s.isdigit()True>>>s='78.90'#小數(shù)點(diǎn)不是數(shù)字>>>s.isdigit()False項(xiàng)目準(zhǔn)備6.字符串常用方法find(sub[,start[,end]])rfind(sub[,start[,end]])說明:sub:字符串(子串);start:開始位置;end:結(jié)束位置。查找范圍start開始,end結(jié)束,不包括end。功能:在一個(gè)較長的字符串S中,在[start,end)范圍內(nèi)查找并返回子串sub首次出現(xiàn)的位置索引,如果沒有找到則返回-1。默認(rèn)范圍是整個(gè)字符串。其中find()方法從左往右查找,rfind()方法從右往左查找。3)查找與替換字符串>>>'happyspringfestival!'.find('happy')0>>>'happyspringfestival!'.find('i',6)9>>>'happyspringfestival!'.rfind('i',5,18)17>>>'happyspringfestival!'.rfind('H',5,18)-1項(xiàng)目準(zhǔn)備6.字符串常用方法index(sub[,start[,end]])rindex(sub[,start[,end]])功能:在一個(gè)較長的字符串S中,查找并返回在[start,end)范圍內(nèi)子串sub首次出現(xiàn)的位置索引,如果不存在則拋出異常。默認(rèn)范圍是整個(gè)字符串。其中index()方法從左往右查找,rindex()方法從右往左查找。3)查找與替換字符串>>>'happyspringfestival!'.index('happy')0>>>'happyspringfestival!'.index('i',6)9>>>'happyspringfestival!'.rindex('i',5,18)17>>>'happyspringfestival!'.rindex('H',5,18)Traceback(mostrecentcalllast):File"<pyshell#31>",line1,in<module>'happyspringfestival!'.index('H',5,18)ValueError:substringnotfound項(xiàng)目準(zhǔn)備6.字符串常用方法count(sub[,start[,end]])功能:在一個(gè)較長的字符串S中,查找并返回[start,end)范圍內(nèi)子串sub出現(xiàn)的次數(shù),如果不存在則返回0。默認(rèn)范圍是整個(gè)字符串。3)查找與替換字符串>>>'happyspringfestival!'.count('i')2項(xiàng)目準(zhǔn)備6.字符串常用方法replace(old,new,count=-1)功能:查找字符串中old子串并用new子串來替換。參數(shù)count默認(rèn)值為-1,表示替換所有匹配項(xiàng),否則最多替換count次。返回替換后的新字符串。3)查找與替換字符串>>>'happyspringfestival!'.replace('s','S')'happySpringfeStival!'項(xiàng)目準(zhǔn)備6.字符串常用方法maketrans()translate()功能:maketrans()方法生成字符映射表,translate()方法是根據(jù)字符映射表替換字符。這兩種方法聯(lián)合起來使用可以一次替換多個(gè)字符。3)查找與替換字符串>>>tlst=''.maketrans('ygl!','1234’) #兩個(gè)序列中的元素按照次序一一對(duì)應(yīng)用于替換>>>'happyspringfestival!'.translate(tlst)'happ1sprin2festiva34'項(xiàng)目準(zhǔn)備6.字符串常用方法strip()功能:去除字符串兩側(cè)的空白字符或指定字符,并返回新字符串。3)查找與替換字符串>>>'happyspringfestival!'.strip()'happyspringfestival!'項(xiàng)目準(zhǔn)備6.字符串常用方法split(sub)功能:以指定字符sub為分隔符,從左往右將字符串分割開來,并將分割后的結(jié)果組成列表返回。如果不指定分隔符,實(shí)際上表示以任何空白字符(包括連續(xù)出現(xiàn)的)作為分隔符。空白字符包括空格、換行符、制表符等。如果字符串中的某種字符出現(xiàn)0次或多次,可以利用split()方法,根據(jù)該字符把字符串分離成多個(gè)子串組成的列表。4)分割與連接字符串>>>'happyspringfestival!'.split()['happy','spring','festival!']>>>'happyspringfestival!'.split('s')['happy','pringfe','tival!']項(xiàng)目準(zhǔn)備6.字符串常用方法join(sub)功能:join()方法可用來連接序列中的元素,并在兩個(gè)元素之間插入指定字符,返回一個(gè)字符串。split()和join()互為逆方法。4)分割與連接字符串>>>'*'.join('happyspringfestival!')#字符串序列中,每個(gè)字符為一個(gè)元素'h*a*p*p*y**s*p*r*i*n*g**f*e*s*t*i*v*a*l*!'>>>'*'.join(['happy','spring','festival!'])#列表中,每個(gè)字符為一個(gè)元素'happy*spring*festival!項(xiàng)目準(zhǔn)備7.string模塊字符串string模塊定義了Formatter類、Template類、capwords函數(shù)和常量,熟悉string模塊可以簡(jiǎn)化某些字符串的操作??梢酝ㄟ^如下命令來查看string類的內(nèi)容。>>>importstring>>>help(string)項(xiàng)目準(zhǔn)備7.string模塊string類用法舉例如下:>>>importstring>>>s='happyspringfestival!'>>>s_cap=string.capwords(s)#capwords()函數(shù)把字符串中每一個(gè)英語單詞首字母變成大寫,其他字母變成小寫,返回新字符串。>>>print(s_cap)'HappySpringFestival!'項(xiàng)目準(zhǔn)備8.正則表達(dá)式正則表達(dá)式是一個(gè)特殊的字符序列,利用事先定義好的一些特定字符以及它們的組合組成一個(gè)“規(guī)則”,檢查一個(gè)字符串是否與這種規(guī)則匹配來實(shí)現(xiàn)對(duì)字符的過濾或匹配。正則表達(dá)式是字符串處理的有力工具,但是并不是Python獨(dú)有的,其他語言也有。1)正則表達(dá)式定義項(xiàng)目準(zhǔn)備8.正則表達(dá)式Python中,re模塊提供了正則表達(dá)式操作所需要的功能。re模塊中findall()方法以列表的形式返回所有能匹配的子串,如果沒有找到匹配的,則返回空列表。2)re模塊>>>importre>>>s=r'xyz'>>>re.findall(s,'xxyxxy') #無匹配[]>>>re.findall(s,'xxyzxxyz') #兩處匹配['xyz','xyz']項(xiàng)目準(zhǔn)備8.正則表達(dá)式大多數(shù)字母和字符一般都會(huì)和自身匹配。如果在字符串前面加了r,表示對(duì)字符串不進(jìn)行轉(zhuǎn)義。有些字符比較特殊,它們和自身并不匹配,而是表明應(yīng)和一些特殊的東西匹配,或者會(huì)影響重復(fù)次數(shù)。這些特殊的字符我們稱之為元字符。3)元字符項(xiàng)目準(zhǔn)備8.正則表達(dá)式(1)“.”:表示除換行符以外的任意字符。、說明:元字符“\S”,表示不是空白符的任意字符,含義與“.”類似。3)元字符>>>importre>>>s='happyspringfestival!'>>>re.findall(r'.',s) #匹配除換行符以外的任意字符['h','a','p','p','y','','s','p','r','i','n','g','','f','e','s','t','i','v','a','l','!']>>>re.findall(r's.',s) #匹配s后面跟除換行符以外的任意字符的形式['sp','st']>>>re.findall(r'i\S',s) #匹配i后面跟不是空白符的任意字符的形式['sp','st']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(2)“[]”:指定字符集。指定一個(gè)用于匹配的字符集,例如:[xyz]、[A-Z]、[0-9]。方括號(hào)內(nèi)的“^”表示補(bǔ)集,匹配不在區(qū)間范圍內(nèi)的字符,例如:[^A]表示除A以外的字符。注意,元字符在方括號(hào)中不起作用,例如:[xyz$]和[x.]中元字符‘$’和‘.’都不起作用。3)元字符>>>importre>>>s='happyspringfestival!'>>>re.findall(r'i[nv]',s)#匹配m后跟i或者w再跟t形式['in','iv']>>>re.findall(r'i[.]',s)#元字符“.”放在[]內(nèi),不起作用[]>>>s='0a12a3a567a8ab'>>>re.findall(r'a[0123456789]a',s)['a3a','a8a']>>>re.findall(r'a[0-9]a',s) #[0-9]與[0123456789]等價(jià)['a3a','a8a']>>>re.findall(r'a[^3]a',s) #x后跟不為3的字符再跟x['a8a']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(3)“^”:匹配行首,匹配以^后面的字符開頭的字符串。注意,“^”根據(jù)其是否在[]中,有不同的含義。3)元字符>>>importre>>>s='happyhappyhappyspringfestival!'>>>re.findall(r'happy',s)['happy','happy','happy']>>>re.findall(r'^happy',s)['happy']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(4)“$”:匹配行尾,匹配以$之前的字符結(jié)束的字符串。3)元字符>>>importre>>>s='happyhappyhappyspringfestivalhappy!'>>>re.findall(r'happy$',s)['happy']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(5)“\”:反斜杠后面可以加不同的字符以表示不同的特殊意義。\b匹配單詞頭或單詞尾;\B與\b相反,匹配非單詞頭或單詞尾;\d匹配任何十進(jìn)制數(shù);相當(dāng)于[0-9];\D與\d相反,匹配任何非數(shù)字字符,相當(dāng)于[^0-9];\s匹配任何空白字符,相當(dāng)于[\t\n\r\f\v];\S與\s相反,匹配任何非空白字符,相當(dāng)于[^\t\n\r\f\v];\w匹配任何字母、數(shù)字或下畫線字符,相當(dāng)于[a-zA-Z0-9_];\W與\w相反,匹配任何非字母、數(shù)字和下畫線字符,相當(dāng)于[^a-zA-Z0-9_];也可以用于取消所有的元字符:\\、\[。這些特殊字符都可以包含在[]中。如:[\s,.]將匹配任何空白字符、","或"."。3)元字符項(xiàng)目準(zhǔn)備8.正則表達(dá)式3)元字符>>>importre>>>s='0a12a3a567a8ab'>>>re.findall(r'[0-9]',s)['0','1','2','3','5','6','7','8']>>>re.findall(r'\d',s)['0','1','2','3','5','6','7','8']>>>re.findall(r'[x\d]',s) #匹配字母“a”或數(shù)字['0','a','1','2','a','3','a','5','6','7','a','8','a']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(6)“*”:匹配位于*之前的字符或子模式的0次或多次出現(xiàn)。3)元字符>>>importre>>>s='hhahaaaaahaaaaaph'>>>re.findall(r'ha*',s) #h后面跟重復(fù)0到多次的a['h','ha','haaaaa','haaaaa','h']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(7)“+”:匹配位于+之前的字符或子模式的1次或多次出現(xiàn)。3)元字符>>>importre>>>s='hhahaaaaahaaaaaph'>>>re.findall(r'ha+',s) #a后面跟重復(fù)1到多次的b,貪心模式['ha','haaaaa','haaaaa']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(8)“?”:匹配位于?之前的0個(gè)或1個(gè)字符。當(dāng)“?”緊隨其他限定符(*、+、{n}、{n,}、{n,m})之后時(shí),匹配模式是“非貪心的”?!胺秦澬牡摹蹦J狡ヅ渌阉鞯奖M可能短的字符串,而默認(rèn)的“貪心的”模式匹配搜索到的、盡可能長的字符串。上一個(gè)例子就是貪心的,下面展示一下非貪心的場(chǎng)景。3)元字符>>>importre>>>s='hhahaaaaahaaaaaph'>>>re.findall(r'ha+?',s) #最小模式、非貪心模式['ha','ha','ha']項(xiàng)目準(zhǔn)備8.正則表達(dá)式(9)“{m,n}”:表示至少有m個(gè)重復(fù),至多有n個(gè)重復(fù)。m,n均為十進(jìn)制數(shù)忽略m表示0個(gè)重復(fù),忽略n表示無窮多個(gè)重復(fù)。{0,}等同于*;{1,}等同于+;{0,1}與?相同。但是如果可以的話,最好使用*、+、或?。3)元字符>>>importre>>>s='haahhhhah'>>>re.findall(r'h{1,3}',s)['h','hhh','h','h']>>>s='010-44618bba020-87654321,010-987654321'>>>re.findall(r'010-\d{8}',s)[,]>>>re.findall(r'\b010-\d{8}\b',s) #\b表示匹配字符串的頭或尾[]項(xiàng)目準(zhǔn)備8.正則表達(dá)式re模塊中的split方法用于將字符串按與正則表達(dá)式匹配的子串分割。re.split函數(shù)的語法格式如下:4)re.split方法re.split(pattern,string,maxsplit=0,flags=0)說明:pattern是正則表達(dá)式;string是要分割的字符串;maxsplit是最大分割次數(shù),默認(rèn)為0表示不限制分割次數(shù);flags與re.match等函數(shù)中的flags參數(shù)含義相同。項(xiàng)目準(zhǔn)備8.正則表達(dá)式re模塊的sub函數(shù)用于替換字符串中與正則表達(dá)式匹配的子串。re.sub函數(shù)的語法格式為:5)re.sub方法re.sub(pattern,repl,string,count=0,flags=0)說明:pattern是正則表達(dá)式;repl是要將匹配子串替換成的字符串;string是待做替換操作的字符串;count是最大替換次數(shù),默認(rèn)為0表示不限制替換次數(shù)(即將所有符合正則表達(dá)式的子串都替換成repl);flags與re.match等函數(shù)中的flags參數(shù)含義相同。項(xiàng)目準(zhǔn)備9.網(wǎng)絡(luò)爬蟲基本概念網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁的程序,它為搜索引擎從萬維網(wǎng)上下載網(wǎng)頁,是搜索引擎的重要組成。傳統(tǒng)爬蟲從一個(gè)或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件。聚焦爬蟲的工作流程較為復(fù)雜,需要根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留有用的鏈接并將其放入等待抓取的URL隊(duì)列。然后,它將根據(jù)一定的搜索策略從隊(duì)列中選擇下一步要抓取的網(wǎng)頁URL,并重復(fù)上述過程,直到達(dá)到系統(tǒng)的某一條件時(shí)停止。另外,所有被爬蟲抓取的網(wǎng)頁將會(huì)被系統(tǒng)存貯,進(jìn)行一定的分析、過濾,并建立索引,以便之后的查詢和檢索;對(duì)于聚焦爬蟲來說,這一過程所得到的分析結(jié)果還可能對(duì)以后的抓取過程給出反饋和指導(dǎo)。目錄|CONTENT1項(xiàng)目介紹2項(xiàng)目目標(biāo)3項(xiàng)目準(zhǔn)備4項(xiàng)目實(shí)施任務(wù)背景大數(shù)據(jù)時(shí)代,數(shù)據(jù)就是礦藏,如何發(fā)現(xiàn)、收集、挖掘數(shù)據(jù),顯然是一項(xiàng)重要的事情。通過網(wǎng)絡(luò)爬蟲,可以快速收集大量的數(shù)據(jù)用于處理或分析。網(wǎng)絡(luò)爬蟲,是一種按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)絡(luò)信息的程序或者腳本。本項(xiàng)目首先基于Windows環(huán)境下的Tomcat軟件發(fā)布本地網(wǎng)站,然后使用Python編寫的爬蟲對(duì)本地網(wǎng)站內(nèi)容進(jìn)行爬取。在實(shí)現(xiàn)爬蟲時(shí),使用了Urllib2模塊來模擬瀏覽器訪問網(wǎng)頁。項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲任務(wù)需求搭建一個(gè)本地網(wǎng)頁,利用python爬蟲爬取本地網(wǎng)頁上的文字內(nèi)容。項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲任務(wù)分析項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲任務(wù)步驟項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲(1)借用Pycharm工具,建立Python3項(xiàng)目(2)搭建一個(gè)本地網(wǎng)頁(3)利用python爬蟲爬取本地網(wǎng)頁上的文字內(nèi)容任務(wù)效果項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲將本地的網(wǎng)站tomcat壓縮包解壓到任意目錄下(本實(shí)驗(yàn)解壓目錄為D盤)任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲進(jìn)入到tomcat/bin文件夾中任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲鼠標(biāo)左鍵雙擊startup.bat啟動(dòng)tomca任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲出現(xiàn)如圖頁面表示啟動(dòng)成功任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲打開的瀏覽器地址欄中輸入網(wǎng)頁地址,查看網(wǎng)頁內(nèi)容,如圖所示。[Command001]:http://localhost:8080/liarbry/html/books-1.html任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲從本步驟開始,使用Python建立爬蟲。用鼠標(biāo)雙擊桌面“Pycharm”圖標(biāo),打開Pycharm工具,依次選擇主菜單“File”->“NewProject…”選項(xiàng),在彈出的窗口中Location對(duì)應(yīng)的文本框中輸入項(xiàng)目名project,單擊“Create”按鈕,完成項(xiàng)目的創(chuàng)建。任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲如果是第1次打開此工具會(huì)彈出“WelcometoPyCharmCommunityEdition”窗口,鼠標(biāo)單擊“Donotshowagain”,下次再打開工具時(shí)就不會(huì)彈出此窗口。然后選擇“CreateNewProject”,在彈出的窗口中Location對(duì)應(yīng)的文本框中輸入項(xiàng)目名“project”,單擊“Create”按鈕,完成項(xiàng)目的創(chuàng)建。任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲建立包名“experiment”,用于寫清洗Python程序。具體做法:選中新建立的項(xiàng)目“project”,右擊,在彈出的快捷菜單中選擇“New”->“PythonPackage”任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲在彈出的NewPackage窗口中的文本框內(nèi),輸入要建立的包名(用戶可自定義)“experiment”,單擊“OK”按鈕,完成包名的創(chuàng)建任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲此時(shí)在窗口左側(cè)的窗口中的“project”項(xiàng)目下可以看到新建立“experiment”程序包,在該包下寫實(shí)驗(yàn)相關(guān)的Python程序任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲設(shè)置統(tǒng)一的編碼模式,使新生成的文件支持中文,統(tǒng)一設(shè)置utf-8編碼。單擊“File”->“settings”->“Editor”->“FileandCodeTemplates”->“PythonScript”選項(xiàng)。在PythonScript對(duì)應(yīng)的文本模式中輸入具體編碼設(shè)置,單擊“OK”按鈕,完成設(shè)置[Code001]:#!/usr/bin/python#-*-coding:utf-8-*-任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲下面開始編寫Python3程序,實(shí)現(xiàn)爬取網(wǎng)頁數(shù)據(jù)的功能。為了實(shí)現(xiàn)爬取http://localhost:8080/liarbry/html/books-1.html網(wǎng)頁的數(shù)據(jù),建立python文件Spider.py編寫程序。具體做法:選中包名“experiment”,右擊,在彈出的快捷菜單中選擇“New”->“PythonFile”,任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲在彈出的窗口中,屬性值Name對(duì)應(yīng)的文本框中輸入新建立的文件的名字“Spider”,單擊“OK”按鈕,完成文件的創(chuàng)建任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲在新建立的Spider.py文件中編寫代碼。具體代碼如下。在彈出的窗口中,屬性值Name對(duì)應(yīng)的文本框中輸入新建立的文件的名字“Spider”,單擊“OK”按鈕,完成文件的創(chuàng)建。#!/usr/bin/python#-*-coding:utf-8-*-#加載模塊importrequestsimportbs4#定義待爬取網(wǎng)頁連接url='http://localhost:8080/liarbry/html/books-3.html'#獲取網(wǎng)頁源碼response=requests.get(url)#使用bs4解析網(wǎng)頁content=bs4.BeautifulSoup(response.content.decode("utf-8"),"lxml")#找到節(jié)點(diǎn)<a>的信息element=content.find_all(name='a')#打開文本文件并寫入信息f1=open('urls.txt','w')f1.write(str(element).strip())f1.close()#查找第三個(gè)節(jié)點(diǎn)<a>中的第0個(gè)內(nèi)容element=content.find_all('a')[3].contents[0]print(element)#查找href為特定鏈接的節(jié)點(diǎn)element=content.find_all(href='/catalogue/category/books/sports-and-games_17/index.html')print(element)#查找屬性id為default的節(jié)點(diǎn)element=content.find_all(id='default')f2=open('body.txt','w')f2.write(str(element).strip())f2.close()任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲運(yùn)行結(jié)果任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲查看爬取的urls.txt內(nèi)容(內(nèi)容過多,給出部分?jǐn)?shù)據(jù)截圖)任務(wù)實(shí)施項(xiàng)目實(shí)施任務(wù)11-1Python爬蟲查看爬取的body.txt內(nèi)容(內(nèi)容過多,給出部分?jǐn)?shù)據(jù)截圖)課后練習(xí)與技能訓(xùn)練一、填空題練習(xí)1.Python中,創(chuàng)建字符串時(shí),可以使用單引號(hào)、

和三引號(hào)。2.Python中,使用字符串的

方法可以按照指定的分隔符對(duì)字符串進(jìn)行切割,返回由切割結(jié)果組成的列表。3.可以利用運(yùn)算符+連接兩個(gè)字符串,也可以使用

方法將序列中的元素以指定的字符連接成一個(gè)新的字符串。課后練習(xí)與技能訓(xùn)練一、填空題練習(xí)4.Python中正則表達(dá)式中的普通字符需要做精確匹配,而特殊字符指定的匹配模式則對(duì)應(yīng)了用于

匹配的規(guī)則。5.Python中正則表達(dá)式的特殊序列是由

和一個(gè)字符構(gòu)成。6.使用Python提供的

模塊,可以實(shí)現(xiàn)基于正則表達(dá)式的模糊匹配。7.

函數(shù)用于將一個(gè)字符串形式的正則表達(dá)式編譯成一個(gè)正則表達(dá)式對(duì)象,供match、search以及其他一些函數(shù)使用。課后練習(xí)與技能訓(xùn)練一、填空題練習(xí)8.re模塊中的match函數(shù)用于對(duì)字符串開頭的若干字符進(jìn)行正則表達(dá)式的匹配。匹配成功,返回一個(gè)

;匹配失敗,返回。9.re模塊中的finditer函數(shù)與re.findall函數(shù)功能都是用于在字符串中找到所有與正則表達(dá)式匹配的子串,區(qū)別在于re.findall函數(shù)返回

形式的結(jié)果,而re.finditer返回

形式的結(jié)果。10.re模塊中的

函數(shù)用于將字符串按與正則表達(dá)式匹配的子串分割。課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)1.已知s1=”I“amastudent.”,s2=’I\’amastudent’,則print(s1,s2)的輸出結(jié)果為()I'amastudent.I'amastudentI“amastudent.I'amastudentI“amastudent.I\'amastudent程序報(bào)錯(cuò)課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)2.下列說法錯(cuò)誤的是()A.find方法是在指定檢索范圍中按照從左至右的順序檢索,找到子串第一次出現(xiàn)的位置B.rfind方法在指定檢索范圍中按照從右至左的順序檢索,找到子串第一次出現(xiàn)的位置C.index與find作用相同,rindex與rfind作用相同,只是find和rfind在檢索不到字符串時(shí)返回-1,而index和rindex會(huì)引發(fā)ValueError異常D.index與find作用相同,rindex與rfind作用相同,只是find和rfind找到一個(gè)就返回,而index和rindex會(huì)檢索到所有的子串課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)3.下列關(guān)于replace方法str.replace(old,new[,max])的說法錯(cuò)誤的是()A.使用字符串中的replace方法可以將字符串中的指定子串替換成其他內(nèi)容B.str是要做替換操作的字符串,old和new分別是要替換的子串和替換成的字符串C.max是最多替換的子串?dāng)?shù)量,如果不指定max參數(shù)則只替換第一個(gè)滿足條件的子串D.replace方法返回替換后的字符串課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)4.print(len("中國\"china"))的輸出結(jié)果是()A.7B.8C.9D.1課后練習(xí)與技能訓(xùn)練二、選擇題練習(xí)5.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論