版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
使用Python模塊
使用Urllib模塊獲取網頁數(shù)據(jù)目錄Content1使用re模塊過濾數(shù)據(jù)2使用PyMySQL模塊存儲數(shù)3項目導言零
網頁數(shù)據(jù)采集是指從網頁中獲取所需的信息,通常情況下,使用Python編程語言來實現(xiàn)。Python提供了許多庫和工具,如Urllib、Requests、re、PyMySQL等,可以發(fā)送HTTP請求、解析HTML頁面并在提取所需內容后將其保存。網頁數(shù)據(jù)采集可以用于各種用途,例如市場調查、競爭分析、輿情監(jiān)測等。但在進行網頁數(shù)據(jù)采集時,需要注意反爬蟲機制、請求頻率限制、數(shù)據(jù)質量等問題。本項目主要通過Urllib、re、PyMySQL等Python模塊的組合實現(xiàn)網頁數(shù)據(jù)的采集與存儲。學習目標零知識目標了解Python模塊的作用;熟悉正則表達式組成;掌握Python中數(shù)據(jù)庫的連接;掌握正則表達式元字符含義。能力目標具備使用正則表達式匹配文本的能力;具備Python模塊下載安裝的能力;具備網頁數(shù)據(jù)采集與存儲的能力。素養(yǎng)目標具備精益求精、堅持不懈的精神;具有良好的行為習慣和良好的心理素質;具備靈活的思維和處理分析問題的能力;具有發(fā)現(xiàn)問題、分析問題、解決問題的能力。任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹1request模塊
在Urllib中,request模塊提供了許多與網絡通信相關的功能,可以用來向HTTP/HTTPS服務器發(fā)送請求并獲取響應結果,以實現(xiàn)數(shù)據(jù)的獲取或提交,并通過該模塊中的函數(shù)和類來實現(xiàn)常見的HTTP操作向指定URL發(fā)送請求,并獲取響應結果發(fā)送POST請求,并添加數(shù)據(jù)添加請求頭部信息處理Cookies,以便在請求之間保持會話處理重定向指定代理HTTP認證任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹request模塊包含的常用函數(shù)見表。函數(shù)描述urlopen()用于向指定URL發(fā)送請求,并獲取響應結果Request()構造一個HTTP請求urlencode()將字典、元組列表等對象轉換為URL編碼格式urlretrieve()用于以文件形式下載指定URL的內容任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹(1)urlopen()
在request模塊中,urlopen()函數(shù)支持HTTP、HTTPS、FTP和文件等多種協(xié)議,并在指定請求方式、請求頭等信息后打開指定的URL,語法格式如下所示。urllib.request.urlopen(url,data=None,timeout=socket._GLOBAL_DEFAULT_TIMEOUT,cafile=None,capath=None,cadefault=False,context=None)參數(shù)說明見表。參數(shù)描述url要訪問的URL地址,可以是字符串類型的URL,也可以是一個Request對象data發(fā)送給服務器的數(shù)據(jù)。如果為None,則發(fā)送GET請求;否則,發(fā)送POST請求并把數(shù)據(jù)添加到請求體中timeout設置超時時間,單位為秒。如果訪問時響應時間超過了這個設定的時間,則會拋出異常。默認值為全局超時,默認超時時間為socket._GLOBAL_DEFAULT_TIMEOUTcafile用于指定SSL/TLS證書文件的路徑,默認值為Nonecapath用于指定SSL/TLS證書文件夾的路徑,默認值為Nonecadefault指示是否使用默認的SSL/TLS驗證機制,默認值為Falsecontext指定ssl.SSLContext實例,用于為HTTPS請求配置SSL/TLS,默認值為None任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹例如,使用urlopen()函數(shù)訪問地址“
”,代碼如下。importurllib.requestresponse=urllib.request.urlopen('
')
需要注意的是,urlopen()函數(shù)在讀取響應內容時會將整個響應內容加載到內存中,對于大文件或網絡延遲較高的情況可能會導致程序崩潰或資源耗盡。因此,在處理大文件時,建議使用其他方式進行下載和處理,如使用requests庫等。任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹
另外,urlopen()函數(shù)在完成URL地址的訪問后,會返回一個類文件對象(Response),其包含多項內容,如:
狀態(tài)碼:表示服務器返回的狀態(tài)代碼,是服務器返回的一個三位數(shù)字代碼,用于表示HTTP請求的處理結果。HTTP響應狀態(tài)碼有5類,各代表不同的含義,見表。類別描述1xx信息性狀態(tài)碼,表示服務器已經接收到請求并正在處理2xx成功狀態(tài)碼,表示服務器已經成功地接收、理解和接受請求3xx重定向狀態(tài)碼,表示客戶端需要執(zhí)行額外的操作才能完成請求4xx客戶端錯誤狀態(tài)碼,表示客戶端請求有語法錯誤或者請求無法實現(xiàn)5xx服務器錯誤狀態(tài)碼,表示服務器在處理請求時發(fā)生了錯誤任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹常見的HTTP響應狀態(tài)碼及其含義見表。參數(shù)描述200OK服務器成功返回請求的數(shù)據(jù)201Created請求已經被實現(xiàn),新的資源已經被創(chuàng)建204NoContent服務器成功處理了請求,但沒有返回任何內容301MovedPermanently請求的網頁已被永久移動到新的位置304NotModified請求的資源未修改,服務器返回此響應時,不會返回資源的內容400BadRequest請求語法錯誤401Unauthorized請求需要用戶驗證403Forbidden服務器拒絕請求404NotFound請求的資源不存在500InternalServerError服務器內部錯誤任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹頭部信息:表示服務器返回的HTTP頭部信息。響應內容:表示服務器返回的內容。
并且,對于Response對象,開發(fā)人員可以通過其提供的方法和屬性獲取服務器返回的各種信息,常用方法和屬性見表。方法和屬性描述status_code/code獲取HTTP請求的響應狀態(tài)碼headers獲取響應頭信息,以字典形式返回text獲取響應內容,以字符串形式返回content獲取響應內容,以字節(jié)形式返回url獲取HTTP響應的最終URLjson()將響應內容解析成JSON格式的數(shù)據(jù),以Python對象形式返回read([size])讀取響應內容,并以字節(jié)形式返回。如果指定了size參數(shù),則最多讀取size個字節(jié)。readline()讀取響應內容中的一行,并以字節(jié)形式返回readlines()讀取所有數(shù)據(jù),并將數(shù)據(jù)拆分成一個行列表getcode()獲取狀態(tài)碼geturl()獲取請求的URL地址decode(encoding='utf-8',errors='strict')將字節(jié)串轉換為字符串,使用指定的編碼方式進行解碼,默認使用utf-8編碼。該方法返回一個字符串類型數(shù)據(jù)getheaders()獲取所有的響應頭信息,返回一個列表,每個元素為(name,value)的二元組info()獲取響應頭信息,等同于調用getheaders()方法getheader(name,default=None)獲取指定名稱的響應頭信息,如果不存在該頭信息,則返回默認值任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹例如,使用Response對象的常用方法和屬性訪問其包含內容,代碼如下。importurllib.requestresponse=urllib.request.urlopen('
')#獲取HTTP響應狀態(tài)碼print(response.code)#獲取HTTP響應頭部信息print(response.headers)#獲取HTTP響應的最終URLprint(response.url)#讀取響應內容并將其轉換為字符串格式html=response.read().decode('utf-8')print(html)#讀取響應內容中的前100個字節(jié)并將其轉換為字符串格式content=response.read(100).decode('utf-8')print(content)#讀取響應內容中的第一行并將其轉換為字符串格式line=response.readline().decode('utf-8')print(line)#獲取HTTP響應頭部信息headers=()print(headers)#獲取指定名稱頭部的值server=response.getheader('Server')print(server)#獲取所有頭部信息all_headers=response.getheaders()print(all_headers)任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹
需要注意的是,每次調用read()方法或readline()方法都會從網絡中讀取數(shù)據(jù),因此在處理大量數(shù)據(jù)時可能會比較慢。如果數(shù)據(jù)量較大,可以考慮分批讀取。(2)Request()在Urllib庫中,Request()函數(shù)用于構造HTTP請求,并返回一個類似請求的對象。通過這個對象,可以設置請求頭、請求方法、請求參數(shù)等信息,并發(fā)送請求到指定的URL地址。通過這種方式,可以更好地控制HTTP請求的參數(shù),以便與特定的API接口進行交互,并在代碼中提高復用性。Request()函數(shù)語法格式如下所示。urllib.request.Request(url,data=None,headers={},method=None)參數(shù)描述url要訪問的URL地址data要發(fā)送的數(shù)據(jù),如果不需要發(fā)送數(shù)據(jù),則該參數(shù)可省略,默認為Noneheaders請求頭信息,為一個字典類型數(shù)據(jù),默認為空字典,包含信息如下:User-Agent:客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本accept:瀏覽器端可以接受的媒體類型Accept-Encoding:編碼方法Accept-Language:支持語言methodHTTP請求方法,常用方法如下:GET:獲取網頁POST:提交信息HEAD:獲取頭部信息PUT:提交信息,原信息被覆蓋DELETE:提交刪除請求任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹
例如,使用Request()函數(shù)創(chuàng)建一個請求對象req,其中傳入了URL地址和請求頭信息,最后,使用urlopen()函數(shù)發(fā)送HTTP請求,并讀取響應內容,代碼如下。importurllib.requesturl='
'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.3'}req=urllib.request.Request(url,headers=headers)response=urllib.request.urlopen(req)html=response.read().decode('utf-8')print(html)需要注意的是,在構造請求時需要確保請求方法和請求頭信息是正確的,否則可能會導致請求失敗或者服務器返回錯誤信息。任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹(3)urlencode()urllib.parse.urlencode(query,doseq=False,safe='',encoding=None,errors=None,quote_via=quote_plus)urlencode()是Python內置的一個URL編碼函數(shù),它主要用于將字典類型的數(shù)據(jù)編碼為URL編碼格式,并返回字符串類型的結果。URL編碼是指將URL中的特殊字符轉換為對應的ASCII碼表示,以便于在不同的系統(tǒng)之間傳輸和識別。urlencode()函數(shù)語法格式如下所示。參數(shù)說明見表。參數(shù)描述query需要進行編碼的參數(shù)字典或者包含二元組的可迭代對象doseq當值為True時,會對字典中每個元素的值都進行編碼;當值為False時,只對字典的鍵進行編碼,默認為Falsesafe指定某些字符不需要進行編碼,例如“-”、“.”等,默認為空字符串encoding指定編碼方式,默認為utf-8errors指定編碼錯誤處理方式,默認為“replace”quote_via指定使用哪種編碼方式,默認為quote_plus()函數(shù)任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹例如,使用urlencode()函數(shù)進行URL編碼,代碼如下。importurllib.parseparams={'name':'Jack','age':'18','gender':'male'}qs=urllib.parse.urlencode(params)print(qs)#輸出:name=Jack&age=18&gender=male需要注意的是,urlencode()函數(shù)只能對參數(shù)進行編碼,并不能對完整的URL進行編碼。如果想對完整的URL進行編碼,可以使用quote()函數(shù)或quote_plus()函數(shù)。任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹(4)urlretrieve()urllib.request.urlretrieve(url,filename=None,reporthook=None,data=None)urlretrieve()函數(shù)是一個HTTP文件下載工具,它可以方便地從網絡上檢索文件,并根據(jù)指定的URL地址將遠程文件下載到本地,并保存為指定的文件,如圖像、音頻、視頻、HTML頁面、JSON數(shù)據(jù)等,語法格式如下所示。參數(shù)說明見表。參數(shù)描述url要下載的文件的URL地址filename保存為本地文件時的名稱,如果未指定,則使用URL中的文件名reporthook回調函數(shù),用于顯示下載進度和狀態(tài)信息dataPOST請求時需要傳輸?shù)臄?shù)據(jù)任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹importurllib.requesturl='
'#從URL檢索圖像,并將其存儲到本地文件urllib.request.urlretrieve(url,'python-logo.png')例如,使用urlretrieve()函數(shù)下載Python官網的Logo圖片,并將其保存到當前目錄下的python-logo.png文件中,代碼如下。需要注意的是,使用urlretrieve()函數(shù)進行文件下載時,程序會阻塞直到整個文件下載完成。如果需要異步下載文件,則需要使用多線程或異步IO技術。任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹2error模塊
error模塊是Urllib的一個異常處理模塊,它提供了一些與網絡相關的異常類,用于在網絡編程中捕獲和處理異常,并提供更好的代碼魯棒性,在使用時需先導入importurllib.error。并且,error模塊中包含了多個異常類,可以用來捕獲常見的網絡異常情況,如連接超時、DNS解析錯誤、HTTP錯誤等,error模塊常用異常類見表。異常類描述URLError如果在訪問URL時發(fā)生錯誤(如網絡連接失敗、DNS查詢失敗等),則會拋出URLError異常。URLError包含以下幾個屬性:reason:錯誤原因,可以是一個字符串或一個異常對象errno:錯誤號filename:URL對應的文件名,如果沒有則為Noneargs:一個元組,包含其他額外的異常信息HTTPError在發(fā)送HTTP請求時,如果服務器返回了錯誤響應,則會拋出HTTPError異常。HTTPError是URLError的子類,包含以下幾個屬性:code:HTTP狀態(tài)碼reason:狀態(tài)碼對應的文本信息headers:響應頭信息ContentTooShortError如果下載的內容長度小于指定長度,則會拋出ContentTooShortError異常。ContentTooShortError繼承自URLError,包含以下幾個屬性:length:實際下載的內容長度expected_length:預期的內容長度任務6-1:使用Urllib模塊獲取網頁數(shù)據(jù)壹例如,在訪問地址“”時做異常處理操作,如果遇到HTTP錯誤或URL錯誤,則捕獲對應的異常并打印錯誤信息。如果沒有遇到異常,則讀取響應內容并輸出,代碼如下。importurllib.requestimporturllib.errortry:#發(fā)送HTTP請求response=urllib.request.urlopen('
')excepturllib.error.HTTPErrorase:print('HTTPError:',e.code,e.reason)excepturllib.error.URLErrorase:print('URLError:',e.reason)else:#讀取響應內容并將其轉換為字符串格式html=response.read().decode('utf-8')print(html)任務6-2使用re模塊過濾數(shù)據(jù)貳1正則表達式正則表達式由普通字符和特殊字符組成,其中,特殊字符也被稱為元字符,它們具有特殊的含義;而除了特殊字符外,正則表達式中的所有字符都是普通字符,它們只匹配它們所代表的字面意思。正則表達式常用字符見表。字符描述.匹配任意單個字符,除了換行符*匹配前面的元素零次或多次+匹配前面的元素至少一次?匹配前面的元素零次或一次\用于轉義下一個字符,例如:“\.”匹配一個點^匹配字符串開頭$匹配字符串結尾[]匹配其中任意一個字符,如“[abc]”匹配a、b或c中的任意一個字符[a-z]匹配任意小寫字母[A-Z]匹配任意大寫字母[0-9]匹配任意數(shù)字[^0-9]匹配任意非數(shù)字字符{n}匹配n次{n,}匹配至少n次{n,m}匹配最少n次且最多m次1、正則表達式字符任務6-2使用re模塊過濾數(shù)據(jù)貳字符描述()將多個元素組成一個整體進行匹配|匹配兩個或多個分支中的任意一個。例如:“cat|dog”匹配cat或dog\d匹配數(shù)字字符\D匹配非數(shù)字字符\w匹配字母、數(shù)字、下劃線\W匹配非字母、數(shù)字、下劃線\b匹配單詞邊界,即字與空格間的位置\B匹配非單詞邊界\f匹配換頁符\n匹配換行符\r匹配回車符\t匹配制表符\s匹配空白字符,包括空格、制表符、換頁符\S匹配非空白字符任務6-2使用re模塊過濾數(shù)據(jù)貳2、正則表達式字符優(yōu)先級0102030405轉義符“\”量詞元字符“*”、“+”、“?”、“{m,n}”等匹配任意單個字符元字符“.”圓括號“()”、方括號“[]”、花括號“{}”和轉換模式符“|”錨定元字符“^”和“$”字符集合“[]”中的范圍表示符“-”在正則表達式中,不同字符或元字符之間具有不同的優(yōu)先級。當多個元字符出現(xiàn)在同一個正則表達式中時,它們按照優(yōu)先級順序進行匹配,一般來說,優(yōu)先級高的元字符會優(yōu)先匹配,然后再考慮優(yōu)先級低的元字符。優(yōu)先級順序從高到低依次為:任務6-2使用re模塊過濾數(shù)據(jù)貳2re模塊在Python中,使用標準庫模塊re來支持正則表達式。該模塊提供了許多函數(shù),可以用于執(zhí)行各種操作,例如匹配、搜索、替換等,常用函數(shù)見表。函數(shù)描述compile()編譯正則表達式match()從字符串開頭開始匹配正則表達式search()在字符串中搜索與正則表達式匹配的第一個內容findall()在字符串中查找所有與正則表達式匹配的內容finditer()在字符串中查找所有與正則表達式匹配的內容sub()將字符串中所有匹配正則表達式的內容替換為指定字符串split()將字符串按照正則表達式進行分割任務6-2使用re模塊過濾數(shù)據(jù)貳(1)compile()compile()函數(shù)是re模塊的基函數(shù),主要用于對正則表達式的字符串形式進行編譯,返回一個pattern對象,該對象可用于多次匹配操作,可以提高正則表達式的執(zhí)行效率,語法格式如下所示。pile(pattern,flags=0)參數(shù)說明見表。參數(shù)描述pattern一個字符串形式的正則表達式flags一個可選的標志參數(shù),用于指定正則表達式的匹配模式,可選值有:re.IGNORECASE/re.I:忽略大小寫進行匹配re.MULTILINE/re.M:啟用多行模式,在該模式下^和$會分別匹配行的開頭和結尾re.DOTALL/re.S:啟用點號“.”匹配任何字符,包括換行符re.ASCII:僅匹配ASCII字符集re.UNICODE/re.U:啟用Unicode匹配re.VERBOSE/re.X:啟用詳細模式,忽略正則表達式中的空白和注釋,并允許使用\n分隔正則表達式任務6-2使用re模塊過濾數(shù)據(jù)貳例如,使用compile()函數(shù)將匹配一個或多個數(shù)字字符的正則表達式編譯為對象regex,代碼如下。importrepattern=r'\d+'regex=pile(pattern)需要注意的是,通過compile()編譯的正則表達式對象可以多次使用,在效率方面具有優(yōu)勢。此外,如果需要在多個地方使用相同的正則表達式,可以預先編譯成對象,避免反復編譯的開銷。任務6-2使用re模塊過濾數(shù)據(jù)貳(2)match()match()函數(shù)是Pythonre模塊中提供的一種用于匹配字符串的函數(shù)之一,它嘗試從字符串的起始位置開始進行正則表達式的匹配,語法格式如下所示。#pattern為正則表達式字符串re.match(pattern,string,flags=0)#pattern為正則表達式對象pattern.match(string,flags=0)參數(shù)說明見表。參數(shù)描述string需要匹配的字符串flags用于指定正則表達式的匹配模式任務6-2使用re模塊過濾數(shù)據(jù)貳例如,基于match()函數(shù)通過正則表達式判斷一個字符串是否以數(shù)字開頭,代碼如下。importres='123abc'm=re.match(r'\d+',s)ifm:print('匹配成功')else:print('匹配失敗')任務6-2使用re模塊過濾數(shù)據(jù)貳需要注意的是,使用match()函數(shù)后,如果匹配成功,將返回一個Match對象,可以使用該對象的方法和屬性獲取匹配到的內容和位置信息;如果匹配失敗,則返回None。Match對象方法和屬性見表。方法和屬性描述group()返回被匹配到的字符串groups()返回一個包含所有分組匹配的字符串的元組,如果沒有捕獲分組則返回空元組groupdict()返回一個包含所有具有名稱的分組匹配的字典,鍵為分組名稱,值為匹配到的字符串start()返回匹配的起始位置end()返回匹配的結束位置span()返回一個(start,end)元組,表示匹配字符串的起始位置和結束位置任務6-2使用re模塊過濾數(shù)據(jù)貳例如,基于match()函數(shù)通過正則表達式判斷一個字符串是否以數(shù)字開頭,并獲取匹配的結果,代碼如下。importres='123abc'm=re.match(r'\d+',s)ifm:print('匹配成功')print(m.group())#輸出'123'print(m.start())#輸出0print(m.end())#輸出3else:print('匹配失敗')需要注意的是,當使用正則表達式進行分組匹配時,group()、start()和end()等方法默認返回第一個分組的匹配結果,如果要獲取其他分組的匹配結果,可以通過指定分組的索引或名稱來獲取。例如,group(1)和group(2)分別表示第1個和第2個分組的匹配結果。任務6-2使用re模塊過濾數(shù)據(jù)貳(3)search()search()函數(shù),用于在字符串中搜索并返回第一個匹配正則表達式的位置。并且,search()函數(shù)在使用時與match()函數(shù)相同。與match()函數(shù)不同之處在于,search()函數(shù)會掃描整個字符串,并返回一個Match對象,如果沒有找到匹配,則返回None。例如,基于search()函數(shù)通過正則表達式判斷一個字符串是否以數(shù)字開頭,并獲取匹配的結果,代碼如下。importres='abc123def'm=re.search(r'\d+',s)ifm:print('匹配成功')print(m.group())#輸出'123'else:print('匹配失敗')需要注意的是,search()函數(shù)會掃描整個字符串,因此比match()函數(shù)的效率更低。如果只需在字符串開頭進行匹配,則應該使用match()函數(shù)。任務6-2使用re模塊過濾數(shù)據(jù)貳(4)findall()相比于search()函數(shù)和match()函數(shù),findall()函數(shù)可以在整個字符串中搜索符合正則表達式模式的所有子串,并以列表的形式返回匹配結果,其中每個元素是一個匹配到的非重疊子串,適用于查找多個匹配結果的情況。并且,使用方式與search()函數(shù)和match()函數(shù)相同。例如,基于findall()函數(shù)通過正則表達式尋找字符串中所有的數(shù)字,并獲取匹配的結果,代碼如下。importres='a1b2c3d4'lst=re.findall(r'\d+',s)print(lst)#輸出['1','2','3','4']需要注意的是,findall()函數(shù)會掃描整個字符串,因此比search()方法的效率更低。如果只需查找第一個匹配的子串,則應該使用search()方法。任務6-2使用re模塊過濾數(shù)據(jù)貳(5)finditer()finditer()函數(shù)功能與findall()函數(shù)基本相同,同樣用于在字符串中查找所有匹配正則表達式的子串,不同之處在于,finditer()函數(shù)會返回一個通過迭代器逐個生成的Match對象序列。例如,基于finditer()函數(shù)通過正則表達式尋找字符串中所有的數(shù)字,并使用迭代器獲取匹配的結果,代碼如下。importres='a1b2c3d4'it=re.finditer(r'\d+',s)forminit:print(m.group())#逐一輸出匹配的子串任務6-2使用re模塊過濾數(shù)據(jù)貳(6)sub()在re模塊中,sub()是一種用于搜索并替換字符串的函數(shù),可以在字符串中查找所有匹配正則表達式的子串,并替換為指定的字符串后,返回替換后的新字符串,語法格式如下所示。re.sub(pattern,repl,string,count=0,flags=0)pattern.sub(repl,string,count=0,flags=0)參數(shù)說明見表。參數(shù)描述repl用于替換的字符串string需要進行搜索和替換的原始字符串count最多替換次數(shù)flags用于指定正則表達式的匹配模式任務6-2使用re模塊過濾數(shù)據(jù)貳例如,基于sub()函數(shù)通過正則表達式將字符串中的數(shù)字替換為“x”,代碼如下。importres='a1b2c3d4's_new=re.sub(r'\d','x',s)print(s_new)#輸出'axbxcdx'任務6-2使用re模塊過濾數(shù)據(jù)貳(7)split()split()是Pythonre模塊中提供的一種用于分割字符串的函數(shù),該函數(shù)可以按照正則表達式匹配的位置,將字符串分割為多個子串,并返回一個列表,語法格式如下所示。re.split(pattern,string,maxsplit=0,flags=0)pattern.split(string,maxsplit=0,flags=0)參數(shù)說明見表。參數(shù)描述string需要進行分割的字符串maxsplit最大分割次數(shù)flags用于指定正則表達式的匹配模式例如,基于split()函數(shù)通過正則表達式將字符串按照空格和逗號進行分割,代碼如下。importres='ab,c,de'lst=re.split(r'[,]+',s)print(lst)#輸出['a','b','c','d','e']任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁1PyMySQL模塊安裝1、PyMySQL模塊簡介使用PyMySQL,可以在Python中連接、查詢和操作MySQL數(shù)據(jù)庫。并且,PyMySQL完全遵循Python數(shù)據(jù)庫APIv2.0規(guī)范,因此可以與許多Python數(shù)據(jù)庫應用程序和框架集成。PyMySQL的主要功能包括:創(chuàng)建MySQL數(shù)據(jù)庫連接對象執(zhí)行SQL查詢和更新語句獲取查詢結果,并進行數(shù)據(jù)處理和轉換支持事務處理和批量操作提供安全的連接和身份驗證機制,以保護數(shù)據(jù)庫的安全性進行錯誤處理和日志記錄,以幫助開發(fā)人員調試和優(yōu)化應用程序具有良好的可擴展性和靈活性,以滿足不同應用場景的需求任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁并且,相比其他的PythonMySQL庫,PyMySQL具有的優(yōu)點如下:純Python編寫,無需安裝額外的C擴展或庫依賴兼容PythonDBAPI2.0規(guī)范,易于學習和使用支持大多數(shù)MySQL特性,如存儲過程、視圖和觸發(fā)器等在網絡連接上表現(xiàn)良好,通過預處理SQL語句可以有效地防止SQL注入攻擊代碼簡單,易于定制和維護任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁2、PyMySQL模塊安裝由于PyMySQL是Python的第三方模塊,因此可以直接使用pip命令進行安裝,效果如圖所示。任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁注意,如果使用pip安裝失敗,可以通過下載源碼方式進行安裝,源碼地址“”安裝成功后,即可進入Python客戶端,通過引入PyMySQL模塊進行驗證,效果如圖所示。任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁2數(shù)據(jù)庫連接1、PyMySQL模塊簡介在使用PyMySQL對MySQL數(shù)據(jù)庫進行操作之前,創(chuàng)建數(shù)據(jù)庫連接對象是比不可少的一步。在PyMySQL中,可以通過connect()函數(shù)來創(chuàng)建數(shù)據(jù)庫連接對象,方法的參數(shù)包括MySQL服務器的連接配置信息,語法格式如下所示。pymysql.connect(host='localhost',user='',password='',database=None,port=3306,charset='utf8mb4')參數(shù)說明見表。參數(shù)描述host數(shù)據(jù)庫服務器地址,默認為localhostuser數(shù)據(jù)庫用戶名password數(shù)據(jù)庫密碼database要連接的數(shù)據(jù)庫名稱,默認為Noneport數(shù)據(jù)庫端口號,默認為3306charset字符集編碼格式,默認為utf8mb4任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁例如,使用connect()函數(shù)創(chuàng)建一個MySQL數(shù)據(jù)庫連接對象,并指定要連接的主機、用戶名、密碼、數(shù)據(jù)庫名、端口號和字符集等信息,代碼如下。importpymysql#創(chuàng)建MySQL數(shù)據(jù)庫連接對象conn=pymysql.connect(host='localhost',user='root',password='123456',database='testdb',port=3306,charset='utf8mb4')任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁需要注意的是,在完成與MySQL數(shù)據(jù)庫的交互后,應該關閉連接,以避免資源浪費和安全問題。在PyMySQL中,可以調用連接對象的close()方法實現(xiàn)連接的關閉。例如,使用close()方法關閉MySQL數(shù)據(jù)庫連接,代碼如下。#關閉數(shù)據(jù)庫連接conn.close()任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁3數(shù)據(jù)庫連接對象方法在PyMySQL中,創(chuàng)建MySQL數(shù)據(jù)庫連接對象后,除了可以使用close()方法實現(xiàn)連接的關閉外,連接對象還提供了多個管理數(shù)據(jù)庫的方法,可以在Python代碼中對MySQL數(shù)據(jù)庫進行操作,常用方法見表。方法描述cursor()創(chuàng)建一個游標對象commit()提交當前事務,該方法只對支持事務的數(shù)據(jù)庫生效任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁(1)cursor()游標是一種與數(shù)據(jù)庫交互的方式,它能夠在查詢結果集中向前和向后移動,并把指針指向不同的記錄。目前,PyMySQL中提供了cursor()方法,能夠創(chuàng)建一個用于執(zhí)行SQL命令并處理查詢結果的游標對象,語法格式如下所示。cursor=conn.cursor(cursor=None)參數(shù)說明見表。參數(shù)描述connPyMySQL連接對象cursor要使用的游標類型,可選值有:pymysql.cursors.Cursor:普通的游標對象,默認創(chuàng)建的游標對象pymysql.cursors.SSCursor:不緩存游標,主要用于當操作需要返回大量數(shù)據(jù)的時候pymysql.cursors.DictCursor:以字典的形式返回操作結果pymysql.cursors.SSDictCursor:不緩存游標,將結果以字典的形式進行返回pymysql.cursors.TupleCursor:以元組的形式返回操作結果任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁例如,使用cursor()方法創(chuàng)建一個游標對象,代碼如下。importpymysql#連接數(shù)據(jù)庫conn=pymysql.connect(host='localhost',user='root',password='123456',database='testdb',port=3306,charset='utf8mb4')#獲取Cursor對象cursor=conn.cursor()任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁(2)commit()在PyMySQL中,commit()方法用于提交當前事務。通常使用在數(shù)據(jù)修改操作(如INSERT、UPDATE和DELETE)執(zhí)行后,以保證數(shù)據(jù)的一致性,如果不調用commit()方法提交事務,則數(shù)據(jù)庫不會保存這些修改。commit()方法語法格式如下所示。mit()任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁4游標對象方法PyMySQL游標對象提供了一些用于管理MySQL數(shù)據(jù)庫查詢結果的方法,這些方法可以幫助開發(fā)人員更好地處理查詢結果集,常用方法見表。方法描述execute()執(zhí)行SQL語句executemany()執(zhí)行多條SQL語句fetchmany()獲取結果集中的指定數(shù)量的行數(shù)據(jù)fetchall()獲取結果集中的所有行數(shù)據(jù)任務6-3使用PyMySQL模塊存儲數(shù)據(jù)叁(1)execute()在PyMySQL中,Cursor對象的execute()方法用于執(zhí)行一條SQL語句,它可以執(zhí)行任何一種SQL語句(包括添加、查詢、更新和刪除等),返回值為受影響的行數(shù)(針對更新、刪除操作),或者None(針對查詢操作),語法格式如下所示。cursor.execute(sql,args=None)參數(shù)說明見表。參數(shù)描述cursorPyMySQL游
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護工和病人協(xié)議合同書(2篇)
- 2025年孝感b2貨運資格證多少道題
- 2024年物業(yè)電梯緊急救援協(xié)議3篇
- 2025年臨沂貨運資格證考試題庫
- 2024年度精準崗位聘任合同范本2篇
- 2025年延邊下載貨運從業(yè)資格證模擬考試
- 2025年西寧貨運從業(yè)資格證網上考試
- 2025年運城貨運從業(yè)資格證網上考試答案
- 2025年深圳貨運從業(yè)資格證考試模擬
- 《輪胎生產流程》課件
- 24秋國開《西方行政學說》形考任務1答案(第2套)
- 2024巡察整改方案和整改措施
- 醫(yī)院冬季防雪防凍工作應急預案
- 2024年公共管理學考試題庫及答案
- 借用資質簽合同模板
- 退休員工返聘審批表
- Unit 7 Careers Writing Workshop 申請信講解 教學設計-2023-2024學年高中英語北師大版2019 選擇性必修第三冊
- 風電場全過程咨詢項目管理規(guī)劃方案
- 數(shù)據(jù)治理(管理)能力評估 -數(shù)據(jù)治理與數(shù)據(jù)管理能力成熟度評估模型
- 廣東省深圳市紅嶺中學2023-2024學年七年級上學期分班考試語文試題(解析版)
- 2024年新蘇教版五年級上冊科學全冊知識點
評論
0/150
提交評論