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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

和三引號。2.Python中,使用字符串的

方法可以按照指定的分隔符對字符串進行切割,返回由切割結果組成的列表。3.可以利用運算符+連接兩個字符串,也可以使用

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

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

和一個字符構成。6.使用Python提供的

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

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

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

形式的結果,而re.finditer返回

形式的結果。10.re模塊中的

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

溫馨提示

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

評論

0/150

提交評論